JavaScript复选框代码报错求助:标识符错误及类型异常排查
一步步解决你的jQuery复选框循环问题
咱们来挨个拆解你遇到的几个问题,看完应该就能完全搞定啦:
第一个错误:unexpected identifier;
你猜的完全没错!这个语法错误就是因为JavaScript里根本没有int这个变量声明关键字——JS里声明变量得用var、let或者const,把int i=0改成var i=0(更推荐用let i=0,块级作用域更不容易出问题),这个语法错误就消失了。
第二个错误:Uncaught TypeError: icheckBoxes[i].is is not a function
这个坑很多刚用jQuery的朋友都会踩:$('input[type="checkbox"]')返回的是jQuery对象集合,但你用icheckBoxes[i]取元素时,拿到的是原生DOM元素,而.is()是jQuery专属的方法,原生DOM元素根本不认它。
给你两个解决办法,选哪个都行:
- 用jQuery的
.eq(i)方法获取对应位置的jQuery对象:icheckBoxes.eq(i).is(":checked") - 直接用原生DOM的
checked属性判断(性能更好,不用转jQuery对象):!icheckBoxes[i].checked
新问题:循环内alert(i)连续弹出4次0,且if条件内的alert仅弹出1次0
看你修改后的代码,核心问题出在那个**return语句**上!当第一次遇到未勾选的复选框时,return会直接终止整个代码块的执行,循环只跑了第一次(i=0)就停了,后面的循环根本没机会执行——而你说连续弹出4次0,大概率是这段代码被重复触发了4次,但每次都在i=0时就终止了。
另外还有个容易忽略的小语法错误:$('input[type="checkbox')少了一个闭合的双引号,应该写成$('input[type="checkbox"]'),不然选择器会失效。
修正后的完整代码
var icheckBoxes = $('input[type="checkbox"]'); alert(icheckBoxes.length); // 先默认所有复选框都勾选,只要有一个未选就改成false AgreeIsActive = true; // 默认禁用提交按钮,全部勾选再启用 $('#AgreementSubmit').prop('disabled', true); for(let i=0; i < icheckBoxes.length; i++) { alert(i); // 用原生checked属性判断更高效 if(!icheckBoxes[i].checked) { alert(i); $('input[type="checkbox"]').addClass('has-error'); AgreeIsActive = false; $('#AgreementSubmit').prop('disabled', false); // 如果要找到第一个未勾选的就停止循环,用break代替return(return会终止整个函数) break; // 如果要检查所有复选框,就删掉break,让循环跑完 } }
额外优化建议:用jQuery的.each()简化遍历
用.each()方法可以避开循环变量的坑,代码也更简洁:
var allChecked = true; var icheckBoxes = $('input[type="checkbox"]'); // 遍历每个复选框 icheckBoxes.each(function() { if(!$(this).is(":checked")) { allChecked = false; // 可以只给当前未勾选的复选框加样式,而不是所有都加 $(this).addClass('has-error'); } else { // 已勾选的要移除错误样式 $(this).removeClass('has-error'); } }); // 更新状态和按钮禁用状态 AgreeIsActive = allChecked; $('#AgreementSubmit').prop('disabled', !allChecked);
内容的提问来源于stack exchange,提问作者Doel
相关产品推荐
相关产品推荐

