input中lang和title属性的另类用法(不知可行不)---转载一篇不错的文章

本文介绍了一种使用JavaScript进行表单验证的方法,通过自定义属性实现对不同类型的表单元素进行合法性的检查,包括文本框、密码框、隐藏域等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



在网上找到一篇关于js表单验证的代码:
http://blog.yesky.com/Blog/_grace/archive/2005/01/10/62725.html
[code]
<input type="text" check="^/d+$" warning="电话号码含有非法字符" name="number" value="">
[/code]
文中在input中加入了check和warning属性,表单验证的功能是实现了,但没法通过代码的验证,我想到了把check,warning分别用lang,title来代替,这样能通过代码的验证,但不知道可行不?
以后会不会出现什么问题?
请高手指教.
另附上我改过后的代码.
[html]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="JavaScript" type="text/javascript">
////////////////////////////////////////////////////////////////////////////////
/*
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
* 功能:通用验证所有的表单元素.
* 使用:
*    <form name="form1" onsubmit="return CheckForm(this)">
*    <input type="text" name="id" check="^/S+$" warning="id不能为空,且不能含有空格">
*    <input type="submit">
*    </form>
* author:wanghr100(灰豆宝宝.net)
* email:wanghr100@126.com
* update:19:28 2004-8-23
* 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
* 已实现功能:
* 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
* 待实现功能:把正则表式写成个库.
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
*/
////////////////////////////////////////////////////////////////////////////////

//主函数
function CheckForm(oForm)
{
    var els = oForm.elements;
    //遍历所有表元素
    for(var i=0;i<els.length;i++)
    {
        //是否需要验证
        if(els[i].lang)
        {
            //取得验证的正则字符串
            var sReg = els[i].lang;
            //取得表单的值,用通用取值函数
            var sVal = GetValue(els[i]);
            //字符串->正则表达式,不区分大小写
            var reg = new RegExp(sReg,"i");
            if(!reg.test(sVal))
            {
                //验证不通过,弹出提示warning
                alert(els[i].title);
                //该表单元素取得焦点,用通用返回函数
                GoBack(els[i])  
                return false;
            }
        }
    }
}

//通用取值函数分三类进行取值
//文本输入框,直接取值el.value
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个
function GetValue(el)
{
    //取得表单元素的类型
    var sType = el.type;
    switch(sType)
    {
        case "text":
        case "hidden":
        case "password":
        case "file":
        case "textarea": return el.value;
        case "checkbox":
        case "radio": return GetValueChoose(el);
        case "select-one":
        case "select-multiple": return GetValueSel(el);
    }
    //取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
    function GetValueChoose(el)
    {
        var sValue = "";
        //取得第一个元素的name,搜索这个元素组
        var tmpels = document.getElementsByName(el.name);
        for(var i=0;i<tmpels.length;i++)
        {
            if(tmpels[i].checked)
            {
                sValue += "0";
            }
        }
        return sValue;
    }
    //取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
    function GetValueSel(el)
    {
        var sValue = "";
        for(var i=0;i<el.options.length;i++)
        {
            //单选下拉框提示选项设置为value=""
            if(el.options[i].selected && el.options[i].value!="")
            {
                sValue += "0";
            }
        }
        return sValue;
    }
}

//通用返回函数,验证没通过返回的效果.分三类进行取值
//文本输入框,光标定位在文本输入框的末尾
//单多选,第一选项取得焦点
//单多下拉菜单,取得焦点
function GoBack(el)
{
    //取得表单元素的类型
    var sType = el.type;
    switch(sType)
    {
        case "text":
        case "hidden":
        case "password":
        case "file":
        case "textarea": el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();
        case "checkbox":
        case "radio": var els = document.getElementsByName(el.name);els[0].focus();
        case "select-one":
        case "select-multiple":el.focus();
    }
}
</script>
</head>
<body>
通用表单函数测试:
<form method="post" name="form1" onsubmit="return CheckForm(this)">
test:
  <input type="text" name="test">不验证<br>
账号:<input type="text" lang="^/S+$" title="账号不能为空,且不能含有空格" name="id">不能为空<br>
密码:<input type="password" lang="/S{6,}" title="密码六位以上" name="id">六位以上<br>
电话:<input type="text" lang="^/d+$" title="电话号码含有非法字符" name="number" value=""><br>
相片上传:<input type="file" lang="(.*)(/.jpg|/.bmp)$" title="相片应该为JPG,BMP格式的" name="pic" value="1"><br>
出生日期:<input type="text" lang="^/d{4}/-/d{1,2}-/d{1,2}$" title="日期格式2004-08-10"  name="dt" value="">日期格式2004-08-10<br>
省份:
<select name="sel" lang="^0$" title="请选择所在省份">
<option value="">请选择</option>
<option value="1">福建省</option>
<option value="2">湖北省</option>
</select>
<br>
选择你喜欢的运动:<br>
游泳<input type="checkbox" name="c" lang="^0{2,}$" title="请选择2项或以上">
篮球<input type="checkbox" name="c">
足球<input type="checkbox" name="c">
排球<input type="checkbox" name="c">
<br>
你的学历:
大学<input type="radio" name="r" lang="^0$" title="请选择一项学历">
中学<input type="radio" name="r">
小学<input type="radio" name="r">
<br>
个人介绍:
<textarea name="txts" lang="^[/s|/S]{20,}$" title="个人介绍不能为空,且不少于20字" rows="10" cols="20"></textarea>20个字以上
<input type="submit">
</form>

</body>
</html>


[/html]

先说一下 楼主的方法可行,不过最好不要使用lang属性(lang自有用处),可以附加在class后面(如 class="inputclass a1 a2") 使你的字符串不和已有的class冲突就行 这样既不会影响当前元素的样式 也能轻松的用脚本分离出你要的值

但是 你太执着了,为什么非要追求什么代码验证呢?
所谓酒肉穿肠过,佛祖心中留.标准只是一个形式,真的明白了为什么要有这个标准,就不用在意这点问题了.

本来每个元素都是一个对象,给这些对象添加自定义的属性没什么不对,可html和xhtml不允许.所有标准不允许的东西怎么办那?绝招:javascript.想必誓死追随标准的同志们都会这样做(特指使用document.write和innerHTML来输出"非法"代码的行为).其实这样做完全是自欺欺人!虽然通过了验证但这个思想却严重背离了标准.(要这么说我就写个asp,凡请求来源是w3.org的一律输出标准空文档,^_^绝对在任何时候都是完全标准).

验证只是一个手段,并不是说通不过验证就是错的,而且现在的标准也并不是完美的.所以想怎么做就怎么做,毕竟浏览者是看你的效果,不是看你的代码,不是看那个黄不拉叽的小标志.

PS.标准就像女人,不能没有,但事事都依着标准的话,那....^_^

 

受教育了.但有的时候通不过去,总感觉有点不爽.必竟已经选择了按标准去做了.不过现在想通了.:)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值