正如标题所示,我想知道checkboxchange
和click
event之间的区别(在 jQuery 中)
我已经阅读了这个问题的答案复选框上的 .click 和 .change 有什么区别
但是,它对我不起作用。change
即使我在不失去焦点的情况下击中空格也会触发。
这是一个小提琴演示
两者的工作方式似乎相似。我在这里错过了什么吗?
正如标题所示,我想知道checkboxchange
和click
event之间的区别(在 jQuery 中)
我已经阅读了这个问题的答案复选框上的 .click 和 .change 有什么区别
但是,它对我不起作用。change
即使我在不失去焦点的情况下击中空格也会触发。
这是一个小提琴演示
两者的工作方式似乎相似。我在这里错过了什么吗?
根据 W3C,onclick
出于可访问性目的,该事件由键盘触发:
SCR35:通过使用锚点和按钮的 onclick 事件使操作键盘可访问
为了给那些不使用鼠标的用户提供更好的用户体验,浏览器已经被开发出来,onclick
即使点击发生在键盘上也能触发该事件。
因此,click
即使使用键盘的空格键单击复选框,jQuery 的事件也会触发。change
,显然,每次复选框的状态改变时都会触发。
该复选框恰好是change
和click
可互换的特殊情况,因为您无法在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/
希望这可以帮助。
主要区别:当您首先单击/点击焦点复选框上的空格时,click
事件会被触发,没有任何变化。此时,您仍然可以阻止默认操作(使用event.preventDefault()
),该操作将切换该checked
复选框的状态,并触发change
事件(没有默认操作)。
在某些浏览器更改事件后,才先大火blur
后click
。
我猜想更改会在复选框更改时触发(即使您不单击它)。例如,如果您通过其他一些功能更改复选框的状态。
我所经历的不同之处在于:
var $check = $(':checkbox');
$checkbox.checked = true;
$checkbox.click( function() {
alert(this.checked); // true
}).change( function() {
alert(this.checked); // false
});
所以点击状态还没有改变,随着改变它已经......
您可以在不单击的情况下选中或取消选中复选框,使用键盘(制表符和空格键)这会更改语句但不会单击。恕我直言