Javascript 未捕获类型错误:无法读取属性';道具';未定义的
我有6个输入复选框,如果选中的复选框超过3个,则最后一个复选框将被取消选中。要更好地理解,请参阅我以前的。这就解决了 现在,我还有一个问题,Javascript 未捕获类型错误:无法读取属性';道具';未定义的,javascript,jquery,html,forms,checkbox,Javascript,Jquery,Html,Forms,Checkbox,我有6个输入复选框,如果选中的复选框超过3个,则最后一个复选框将被取消选中。要更好地理解,请参阅我以前的。这就解决了 现在,我还有一个问题,Math.random已经选中了3个复选框。单击任何未选中的复选框。控制台中出现错误 未捕获的TypeError:无法读取未定义的属性“prop” 代码如下: var random_checked = $("input[type=checkbox]").get().sort(function(){ return Math.round(Math.r
Math.random
已经选中了3个复选框。单击任何未选中的复选框。控制台中出现错误
未捕获的TypeError:无法读取未定义的属性“prop”
代码如下:
var random_checked = $("input[type=checkbox]").get().sort(function(){
return Math.round(Math.random())-0.6; //so we get the right +/- combo
}).slice(0,3);
$(random_checked).prop('checked', true);
var checked = [];
$('input[type=checkbox]').change(function(e) {
var num_checked = $("input[type=checkbox]:checked").length;
if (num_checked > 3) {
checked[checked.length - 1].prop('checked', false);
checked.pop();
}
if($.inArray($(this), checked) < 0){
checked.push($(this));
}
});
var random\u checked=$(“输入[type=checkbox]”).get().sort(函数(){
返回Math.round(Math.random())-0.6;//这样我们就得到了正确的+/-组合
}).切片(0,3);
$(随机检查).prop('checked',true);
检查的var=[];
$('input[type=checkbox]')。更改(函数(e){
var num_checked=$(“输入[类型=复选框]:选中”)。长度;
如果(选中的数量>3){
选中[checked.length-1]。属性('checked',false);
选中。pop();
}
如果($.inArray($(此),选中)<0){
选中。推送($(此));
}
});
您可以尝试以下代码
var checked = $('input[type=checkbox]:checked').map(function(){
return $(this);
}).get(); // First change
$('input[type=checkbox]').change(function(e) {
var num_checked = $("input[type=checkbox]:checked").length;
if (num_checked > 3) {
$(checked.pop()).prop('checked', false);// Second change
}
if($.inArray($(this), checked) < 0){
checked.push($(this));
}
});
► <代码>$(选中.pop())用于选择最后插入的元素
为什么您的代码不起作用?
根据您的代码
var checked=[]代码>在初始阶段将为空。所以选中[checked.length-1]
将变得未定义。您应该在选中列表中推送初始项
$(random_checked).each(function(){
console.log($(this));
checked.push($(this));
});
这一个有效,只需简单地添加lastChecked=random_checked[2];这样就定义了您的lastChecked
var random_checked = $("input[type=checkbox]").get().sort(function(){
var test = Math.round(Math.random())-0.6;
return test; //so we get the right +/- combo
}).slice(0,3);
$(random_checked).prop('checked', true);
lastChecked = random_checked[2];
var $checks = $('input:checkbox').click(function(e) {
var numChecked = $checks.filter(':checked').length;
if (numChecked > 2) {
alert("sorry, you have already selected 3 checkboxes!");
lastChecked.checked = false;
}
lastChecked = this;
});
checked[checked.length-1]
未定义以避免对选中数组的长度进行错误检查:if(num_checked>3&&checked.length>0){----它是被定义的。如果我只是删除match.random
或默认选择,那么它就工作了。看。@zaki。你的解决方案很好。它工作了,但同时不应该选择4个复选框。如果选择了第4个复选框,那么最后一个应该同时取消选择。看到了吗,这真的很酷。谢谢你的解决了这个问题e问题,但也解释了我的错误背后的原因。总是很高兴在这里看到:)
var random_checked = $("input[type=checkbox]").get().sort(function(){
var test = Math.round(Math.random())-0.6;
return test; //so we get the right +/- combo
}).slice(0,3);
$(random_checked).prop('checked', true);
lastChecked = random_checked[2];
var $checks = $('input:checkbox').click(function(e) {
var numChecked = $checks.filter(':checked').length;
if (numChecked > 2) {
alert("sorry, you have already selected 3 checkboxes!");
lastChecked.checked = false;
}
lastChecked = this;
});