我正在努力确保群组中至少有一个复选框始终处于检查状态,但我遇到了困难。
我有多个名称以post_type[
开头的复选框。该函数运行on('change')
调用就好了,当我检查输入是否是选中的复选框时出现问题,我得到以下错误。
value.is
不是函数
有人可以帮我解决我的代码问题吗?感谢。
$(document).ready(function($){
$('input[name^="post_type["]', '#site-search').on('change', function(){
var checks = $('input[name^="post_type["]');
var one_checked = is_one_checked(checks);
if(one_checked === false){
$(this).attr('checked', 'true');
}
});
});
function is_one_checked(checks){
var checked = false; // Wheteher or not at least one box is checked (false by default)
$(checks).each(function(key, value){
if(value.is(':checkbox') && value.is(':checked')){
checked = true;
}
});
return checked;
}
答案 0 :(得分:1)
试试这样:
$(checks).each(function(key, value){
if($(this).is(':checkbox') && $(this).is(':checked')){
checked = true;
}
});
答案 1 :(得分:1)
在循环中使用$(this)
,而不是value
$(checks).each(function(key, value){
if($(this).is(':checkbox') && $(this).is(':checked')){
checked = true;
}
});
答案 2 :(得分:1)
value.is(':checked')
不起作用的原因是因为在循环中,value
作为原始DOM对象传递。 .is()
是一个jQuery方法,因此您必须将value
包装在jQuery对象中才能使用它:
$(value).is(':checked')
答案 3 :(得分:0)
在你的html中指定attr checked =“checked”,然后为什么不使用.attr:
if($(this).attr('type') == 'checkbox' && $(this).attr('checked') == 'checked'){
$(this).attr('checked','checked')
}