工作中遇到需求,就是form里面所有的checkbox,radio都是必填的。
原来的做法是写多个function进行检查,部分代码如下
function checkElement(c) { for (var i=0;i<c.length;i++) { if (c[i].checked) return true; } c[0].focus(); alert("请完成所有答题!"); return false; } [/code] 需要传入要检查的radio或者checkbox。 原来的写法是要把所有要检查的object都写进去,比如 [code lang="javascript" linenum="off"] result=checkElement(form1.check_1)&&checkElement(form1.radio_2); [/code] 如果有10道8道还可以,如果多的话,就要写好多,还容易漏掉,出错。 这次有100多道题目,所以想用jquery来选择所有的checkbox和radio,然后再来检查。 代码如下: [code lang="javascript" linenum="off"] var myt=""; //用于存储生成的js校验字符串 //每次load页面,只生成一次,第一次的速度还是有点慢的 function check() { var result = true; if (myt==""){ //如果没有myt,就选择所有要检验的element列表,用来校验。 var alle=$("select[@name='text_79'],input[@type='radio'],input[@type='checkbox']"); for (var i=0;i < alle.length;i++) { var myobj = alle[i]; if (i==0||alle[i].name!=alle[i-1].name){ if (i>0) myt+="&&"; //根据不同的类型,调用不同的check function //应该写成一个函数,在函数里面判断比较好:S if (myobj.type!="select-one") myt+="checkElement(form1."+myobj.name+")"+"\n"; else myt+="checkText(form1."+myobj.name+")"+"\n"; } }} //最后执行拼出来的js语句 eval("result = "+myt+";"); if (!result) return false; return true; }
checkText是检验text的值的程度,是否为0,如果0就是未填写
花了点时间的是
var alle=$(“select[@name=’text_79′],input[@type=’radio’],input[@type=’checkbox’]”);
这一句,选择多个类型的element
但是上述写法有个问题,就是顺序和自然顺序不一样。还需要改进。
上面的and有点像union,如果是同一个element的属性的and,用下面的方法
$(“input[@name^=’S_’][@name$=’_R’]”).autocomplete(“autocomplete_backend.jsp”);
上面的是,input,名字以S_开始,并且以_R结束的元素。
《 “jquery进行and选择操作” 》 有 2 条评论
您没明白我的意思?
我没明白您的意思。
result=checkElement(form1.check_1)&&checkElement(form1.radio_2);
没有这个必要吧
原生js也可以返回一个dom集合来遍历的吧?