Uncaught TypeError: Cannot read property 'prop' of undefined
Uncaught TypeError: Cannot read property 'prop' of undefined
我有 6 个输入复选框,如果复选框被选中超过 3 个,最后一个将被取消选中。为了更好地理解,请参考我之前的 。哪个解决了。
现在,我有另一个问题,现在 Math.random
已经选中了 3 个复选框。单击任何未选中的复选框。我在控制台中遇到错误。
Uncaught TypeError: Cannot read property 'prop' of undefined
代码如下:
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 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));
}
});
所做的更改
► 使用
将当前选中的元素存储到数组中
var checked = $('input[type=checkbox]:checked').map(function(){
return $(this);
}).get();
► $(checked.pop())
用于select 最后插入的元素。
为什么您的代码不起作用?
根据您的代码 var checked = [];
在初始阶段将为空。所以 checked[checked.length - 1]
会变成 undefined.
您应该将初始项目推送到检查列表中。
$(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;
});
我有 6 个输入复选框,如果复选框被选中超过 3 个,最后一个将被取消选中。为了更好地理解,请参考我之前的
现在,我有另一个问题,现在 Math.random
已经选中了 3 个复选框。单击任何未选中的复选框。我在控制台中遇到错误。
Uncaught TypeError: Cannot read property 'prop' of undefined
代码如下:
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 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));
}
});
所做的更改
► 使用
将当前选中的元素存储到数组中var checked = $('input[type=checkbox]:checked').map(function(){
return $(this);
}).get();
► $(checked.pop())
用于select 最后插入的元素。
为什么您的代码不起作用?
根据您的代码 var checked = [];
在初始阶段将为空。所以 checked[checked.length - 1]
会变成 undefined.
您应该将初始项目推送到检查列表中。
$(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;
});