Javascript 这个.click()和$(这个).click()之间有什么区别?
最后,我决定这不是一个我特别需要解决的问题,但是我不明白为什么会发生这种情况,这让我很困扰 基本上,我有一些复选框,我只希望用户能够选择一定数量的复选框。我使用下面的代码来实现这个效果Javascript 这个.click()和$(这个).click()之间有什么区别?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,最后,我决定这不是一个我特别需要解决的问题,但是我不明白为什么会发生这种情况,这让我很困扰 基本上,我有一些复选框,我只希望用户能够选择一定数量的复选框。我使用下面的代码来实现这个效果 $j( function () { $j('input[type=checkbox].vote_item').click( function() { var numLeft = (+$j('#vote_num').text()); console.log(numLeft)
$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()
});
这实际上会使计数器计数
我确实意识到,使用计数器计数并不是最安全的方法,但是我确实有服务器端错误检查,防止在数据库中输入超过所需数量的数据,这就是我决定不需要修复的原因
编辑:$j是因为我必须在noConflict模式下使用jQuery…$(这)包含一个jQuery包装器(有很多函数),而这仅仅是DOM对象。计数器上升的事实给了我一个线索,即您正在使用的checked属性之间存在链接,并手动触发单击事件 我在谷歌上搜索了“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;
});
this.click()
调用浏览器DOM方法
$(this).click()
调用jQuery方法,它不仅仅调用browser方法:有关详细信息,请参阅函数的实现。我理解,但是…函数之间的具体区别是什么?当通过jQuery包装的元素触发时,jQuery是否会改变其他DOM事件的功能?