jquery进行and选择操作

工作中遇到需求,就是form里面所有的checkbox,radio都是必填的。
原来的做法是写多个function进行检查,部分代码如下

function checkElement(c) {
	for (var i=0;i<c.length;i++) {
		if (c&#91;i&#93;.checked) return true;
	}
	c&#91;0&#93;.focus();
	alert("请完成所有答题!");
	return false;
}
&#91;/code&#93;
需要传入要检查的radio或者checkbox。
原来的写法是要把所有要检查的object都写进去,比如
&#91;code lang="javascript" linenum="off"&#93;
result=checkElement(form1.check_1)&&checkElement(form1.radio_2);
&#91;/code&#93;
如果有10道8道还可以,如果多的话,就要写好多,还容易漏掉,出错。
这次有100多道题目,所以想用jquery来选择所有的checkbox和radio,然后再来检查。
代码如下:
&#91;code lang="javascript" linenum="off"&#93;
var myt="";
//用于存储生成的js校验字符串
//每次load页面,只生成一次,第一次的速度还是有点慢的
function check() {
	var result = true;
	if (myt==""){
//如果没有myt,就选择所有要检验的element列表,用来校验。
	var alle=$("select&#91;@name='text_79'&#93;,input&#91;@type='radio'&#93;,input&#91;@type='checkbox'&#93;");
	for (var i=0;i < alle.length;i++) {
    var myobj = alle&#91;i&#93;;
		if (i==0||alle&#91;i&#93;.name!=alle&#91;i-1&#93;.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个想法

  1. skyblue

    result=checkElement(form1.check_1)&&checkElement(form1.radio_2);
    没有这个必要吧
    原生js也可以返回一个dom集合来遍历的吧?

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据