循环获取选中Checkbox的name值时出现错误,寻求解决方案
问题分析与解决
你遇到的问题核心是混淆了jQuery对象和原生DOM元素的操作逻辑:
checkedInputs.attr('name')[i]的问题:
jQuery的attr()方法对多元素对象调用时,仅返回第一个匹配元素的属性值。所以checkedInputs.attr('name')拿到的是第一个选中input的name字符串,[i]相当于取这个字符串的第i个字符,自然会反复输出第一个name的单个字符。checkedInputs[i].attr('name')的问题:checkedInputs[i]是从jQuery对象中取出的原生DOM元素,原生DOM元素没有jQuery的attr()方法,因此会报错“attr不是函数”。
正确写法
方法1:用jQuery的eq()定位元素
eq(i)会返回jQuery对象中第i个元素的jQuery包装版本,可正常调用attr():
success: function (data) { var checkedInputs = $(data).find('input[checked="checked"]'); for (var i = 0; i < checkedInputs.length; i++) { console.log(checkedInputs.eq(i).attr('name')); } }
方法2:直接操作原生DOM元素
原生DOM元素可通过getAttribute()方法获取属性:
success: function (data) { var checkedInputs = $(data).find('input[checked="checked"]'); for (var i = 0; i < checkedInputs.length; i++) { console.log(checkedInputs[i].getAttribute('name')); } }
方法3:用jQuery的each()遍历(更简洁)
jQuery提供专门的遍历方法each(),无需手动编写for循环:
success: function (data) { $(data).find('input[checked="checked"]').each(function() { // jQuery方式 console.log($(this).attr('name')); // 原生方式(性能更优) // console.log(this.getAttribute('name')); }); }
内容的提问来源于stack exchange,提问作者MShack
相关产品推荐
相关产品推荐

