Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:无法读取属性';道具';未定义的_Javascript_Jquery_Html_Forms_Checkbox - Fatal编程技术网

Javascript 未捕获类型错误:无法读取属性';道具';未定义的

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

我有6个输入复选框,如果选中的复选框超过3个,则最后一个复选框将被取消选中。要更好地理解,请参阅我以前的。这就解决了

现在,我还有一个问题,
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;
});