最后,我认为这不是我特别需要解决的问题,但是我不理解为什么会发生这种情况。
基本上,我有一些复选框,我只希望用户能够选择一定数量的复选框。我正在使用下面的代码来实现这种效果。
$j( function () {
$j('input[type=checkbox].vote_item').click( function() {
var numLeft = (+$j('#vote_num').text());
console.log(numLeft);
if ( numLeft == 0 && this.checked ) {
alert('I\'m sorry, you have already voted for the number of items that you are allowed to vote for.');
return false;
} else {
if ( this.checked == true ) {
$j('#vote_num').html(numLeft-1);
} else {
$j('#vote_num').html(numLeft+1);
}
}
});
});
当我测试它时,我注意到如果我使用了:
$j('input[type=checkbox]').each( function () {
this.click()
});
Javascript按照我的预期做出反应,但是当用于:
时
$j('input[type=checkbox]').each( function () {
$j(this).click()
});
它实际上会使计数器计数UP。
我确实意识到这不是使用计数器保持计数的最安全的方法,但是我确实有服务器端错误检查,这可以防止在数据库中输入超过必需的数量,这就是我已经确定它实际上并不需要修复。
编辑:$ j是因为我必须在noConflict模式下使用jQuery ...
答案 0 :(得分:6)
$(this)包含一个jQuery包装器(包含许多函数),而这只是DOM对象。
答案 1 :(得分:3)
计数器上升的事实让我得到了一个线索,即你正在使用的checked属性和手动触发click事件之间存在链接。
我在Google搜索了“jquery复选框点击事件提升”并找到了此链接,其中作者面临完全相同的问题及其使用的解决方法。
另外,我认为您可以进一步简化代码:
$j('input[type=checkbox].vote_item').click(
function()
{
var maxNumberOfChoices = 5;
//get number of checked checkboxes.
var currentCheckedCount = $j('input[type=checkbox].vote_item :checked');
if(currentCheckedCount > maxNumberOfChoices)
{
//It's useful if you show how many choices user can make. :)
alert('You can only select maximum ' + maxNumberOfChoices + ' checkboxes.');
return false;
}
return true;
});
答案 2 :(得分:3)