j查询复选框的更改和单击事件之间的差异
jQuery difference between change and click event of checkbox
正如标题所暗示的那样,我想知道复选框的change
和click
事件之间的区别(在jQuery中)
我已经阅读了这个问题的答案 复选框上的.click和.change有什么区别
但是,它对我不起作用。 即使我击中空间而不会失去焦点,change
也会开火。
这是一个小提琴演示
两者似乎都是一样的。我在这里错过了什么吗?
根据 W3C 的说法,出于辅助功能目的,onclick
事件由键盘触发:
SCR35:通过使用锚点和按钮的 onclick 事件使操作键盘可访问
为了给不使用鼠标的用户提供更好的用户体验,已经开发了浏览器来触发onclick
事件,即使单击发生在键盘上。
因此,即使使用键盘的空格键单击复选框,jQuery 的 click
事件也会触发。 显然,每次复选框的状态更改时都会触发change
。
该复选框恰好是change
和click
可以互换的特殊情况,因为您无法在不触发click
的情况下触发change
事件。
当然,此规则的例外情况是,如果您要使用 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
事件(没有默认操作)。
在某些浏览器中,更改事件仅在click
之后的第一个blur
之后触发。
我猜当复选框更改时会触发更改(即使您不单击它)。例如,如果您通过其他功能更改复选框的状态。
我经历的区别是这样的:
var $check = $(':checkbox');
$checkbox.checked = true;
$checkbox.click( function() {
alert(this.checked); // true
}).change( function() {
alert(this.checked); // false
});
因此,单击状态尚未更改,更改后
您可以选中或取消选中复选框而无需单击,使用键盘(制表符和空格键)这将更改为更改语句,但不能单击。恕我直言
如果这没有帮助,请告诉我,我将删除我的帖子:
Change
: http://api.jquery.com/change/- 我认为当元素的state
如果更改时会触发更改事件,即不是单击而是更改。复选框已选中和未选中状态。
Click
:单击事件是当您单击元素时,复选框的状态无关紧要。
就像在伪代码中一样
if checkbox state is checked
alert(Hulk is awesome);
if checkbox is click every time
alert(Ironman is alright);
更改事件在复选框状态已更改时触发 无论发生什么情况,要么通过按住空格键 当复选框聚焦时 或触发更改事件 或单击"单击事件的位置"仅当我们通过鼠标单击复选框时才触发,但在单击之前 如果指定了更改事件,则它也运行,然后执行单击事件。
在这里,您可以看到在垃圾箱上完成了清晰的脚本:http://codebins.com/codes/home/4ldqpbu
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何在jQuery中获取两个事件之间的时间差
- Angularjs事件与发布/订阅指令之间的通信
- GWT-允许鼠标事件在两个叠加画布之间传播
- Meteor-在助手、事件和模板之间传递数据
- 如何更新angular2中组件之间的事件数据
- 如何在onchange事件中的两个函数之间进行选择
- 我可以让事件在发起者和后代之间传播吗
- 如何在JavaScript中测量交互和mousedown事件之间的延迟
- 骨干事件触发不同视图之间的协调
- html内联事件处理程序和非引人注目的事件处理程序之间括号的用法不同
- jQuery:存储自定义事件之间的数据
- JQuery ajax在2个按钮之间切换's类具有2次单击事件,但无法更改按钮的值
- Socket.IO:如何在同一服务器中的Socket.on()事件之间通信/交换数据
- jQuery 和 OpenLayer 之间的事件侦听器冲突
- Marionette.CompositeView 和 Marionette.ItemView 之间的事件
- 如何在没有事件的自定义聚合物元素之间进行讨论
- 在模块之间共享的事件发射器
- 在两个事件侦听器之间交替的更有效方法
- 如何识别源自JS脚本的http请求与HTML