复选框的更改和单击事件之间的jQuery区别

IT技术 javascript jquery checkbox onchange
2021-02-08 09:06:24

正如标题所示,我想知道checkboxchangeclickevent之间的区别(在 jQuery 中)

我已经阅读了这个问题的答案复选框上的 .click 和 .change 有什么区别

但是,它对我不起作用。change即使我在不​​失去焦点的情况下击中空格也会触发。

这是一个小提琴演示

两者的工作方式似乎相似。我在这里错过了什么吗?

6个回答

根据 W3C,onclick出于可访问性目的,该事件由键盘触发:

SCR35:通过使用锚点和按钮的 onclick 事件使操作键盘可访问

为了给那些不使用鼠标的用户提供更好的用户体验,浏览器已经被开发出来,onclick即使点击发生在键盘上能触发该事件

因此,click即使使用键盘的空格键单击复选框,jQuery 的事件也会触发change,显然,每次复选框的状态改变时都会触发。

该复选框恰好是changeclick可互换的特殊情况,因为您无法在change不触发click.

当然,此规则的例外是如果您要使用 javascript 手动更改复选框,例如:

/* this would check the checkbox without firing either 'change' or 'click' */
$('#someCheckbox').prop('checked',true);

/* this would fire 'change', but not 'click'. Note, however, that this
   does not change the checkbox, as 'change()' is only the function that
   is fired when the checkbox changes, it is not the function that
   does the changing  */
$('#someCheckbox').trigger('change');

/* this would fire 'click', which by default change state of checkbox and automatically triggers 'change' */
$('#someCheckbox').trigger('click');

这是这些不同操作的演示:http : //jsfiddle.net/jackwanders/MPTxk/1/

希望这可以帮助。

答案中的这一部分“复选框恰好是更改和点击可互换的特殊情况,因为您无法在不触发点击的情况下触发更改事件。” 大多数情况下是正确的。但是,用户应该注意也有例外。正如我刚刚发现的那样,如果您试图检测这样的键 - if(event.shiftKey) - 它仅适用于单击而不适用于更改。以防万一它可以帮助任何人
2021-03-15 09:06:24
The checkbox just happens to be the special case where change and click are interchangable, because you can't fire the change event without also triggering click我只需要像这样简单直接的词。我会等一段时间。如果没有人反对你的话,你就会得到赏金。
2021-03-22 09:06:24
人们可能应该注意其中的差异。如果您使用的是 IE10/11,如果复选框处于不确定状态(即使您单击它),“更改”事件将不会因错误而触发。参见 bug bountysource.com/issues/……“click ”事件将可靠地触发
2021-04-04 09:06:24
@pozs,也有很大的不同。但是你应该得到一个总结一切的赏金和键盘的 w3c 链接onclick
2021-04-11 09:06:24

主要区别:当您首先单击/点击焦点复选框上的空格时,click事件会被触发,没有任何变化。此时,您仍然可以阻止默认操作(使用event.preventDefault()),该操作将切换该checked复选框状态,并触发change事件(没有默认操作)。

在某些浏览器更改事件后,才先大火blurclick

优秀的。更新我的小提琴preventDefault()在单击事件上,它停止单击但不在检查事件上停止,它不会停止检查:) 它的主要区别之一
2021-03-18 09:06:24

我猜想更改会在复选框更改时触发(即使您不单击它)。例如,如果您通过其他一些功能更改复选框的状态。

我所经历的不同之处在于:

var $check = $(':checkbox');
$checkbox.checked = true;
$checkbox.click( function() {
    alert(this.checked); // true
}).change( function() {
    alert(this.checked); // false
});

所以点击状态还没有改变,随着改变它已经......

这是一个很好的观点。但是这里好像失败
2021-04-10 09:06:24
点击不会通过键盘触发应该是不言自明的imo
2021-04-11 09:06:24

您可以在不单击的情况下选中或取消选中复选框,使用键盘(制表符和空格键)这会更改语句但不会单击。恕我直言

change 即使使用鼠标,事件也会触发
2021-03-20 09:06:25
我是那个意思。我的意思是即使没有鼠标点击,更改也会触发。
2021-03-25 09:06:25
click 无需鼠标点击即可触发事件:)
2021-04-10 09:06:25