Javascript jQuery复选框的更改和单击事件之间的差异
正如标题所示,我想知道Javascript jQuery复选框的更改和单击事件之间的差异,javascript,jquery,checkbox,onchange,Javascript,Jquery,Checkbox,Onchange,正如标题所示,我想知道change和click事件复选框(在jQuery中)之间的区别 我已经把这个问题的答案读了下来 但是,这对我不起作用更改即使我在不失去焦点的情况下点击空格也会触发 这里有一个 两者似乎都在起作用。我在这里遗漏了什么吗?我猜当复选框更改时会触发更改(即使您没有单击它)。例如,如果您通过其他功能更改复选框的状态 您可以使用键盘(选项卡和空格键)在不单击的情况下选中或取消选中复选框。这将转到更改语句,而不是单击。IMHO请让我知道如果这没有帮助,我将删除我的帖子: Change
change
和click
事件复选框(在jQuery中)之间的区别
我已经把这个问题的答案读了下来
但是,这对我不起作用<代码>更改即使我在不失去焦点的情况下点击空格也会触发
这里有一个
两者似乎都在起作用。我在这里遗漏了什么吗?我猜当复选框更改时会触发更改(即使您没有单击它)。例如,如果您通过其他功能更改复选框的状态 您可以使用键盘(选项卡和空格键)在不单击的情况下选中或取消选中复选框。这将转到更改语句,而不是单击。IMHO请让我知道如果这没有帮助,我将删除我的帖子:
Change
:-如果元素的状态发生更改,即未单击但已更改,则我估计会触发更改事件复选框具有选中和未选中状态
单击
:单击事件是指当您单击元素时,无论复选框的状态如何
就像伪代码一样
if checkbox state is checked
alert(Hulk is awesome);
if checkbox is click every time
alert(Ironman is alright);
我所经历的不同是:
var $check = $(':checkbox');
$checkbox.checked = true;
$checkbox.click( function() {
alert(this.checked); // true
}).change( function() {
alert(this.checked); // false
});
因此,通过单击,状态尚未更改,通过更改…根据W3C,出于可访问性目的,onclick事件由键盘触发:
为了给那些不使用鼠标的用户提供更好的用户体验,开发了浏览器,即使用键盘点击,也会触发onclick
事件
因此,即使使用键盘的空格键单击复选框,jQuery的click
事件也会触发<代码>更改
,显然,每次复选框的状态更改时都会触发
该复选框恰好是一种特殊情况,其中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');
以下是这些不同行动的演示:
希望这能有所帮助。当复选框状态发生更改时,无论发生什么情况,都会触发更改事件。当复选框处于焦点或触发更改事件时,按空格键,或仅当我们通过鼠标单击复选框但在单击“如果”之前,单击“在何处作为单击事件”时,才会触发更改事件已指定更改事件,然后它也会运行,然后执行单击事件
在这里,您可以看到已在箱子上执行了清除脚本:主要区别:当您首先单击/点击聚焦复选框上的空格时,单击事件将被触发,没有任何更改。此时,您仍然可以阻止默认操作(使用event.preventDefault()
),该操作将切换该复选框的选中状态,并触发更改
事件(没有默认操作)
在某些浏览器中,更改事件只有在第一次模糊后才会触发,单击后似乎是您自己回答了问题。单击
意味着与任何其他元素一样单击复选框,change
表示复选框的值已更改。但每次单击都会更改该值。那么有什么区别呢?只要复选框的值改变,就会触发更改。。。这可以在-1发生。点击鼠标2。使用键盘更改其值3。以编程方式更改值。。。但单击事件仅在您使用鼠标单击或模拟鼠标单击时触发programatically@Jashwant首先想到的是这个change
事件即使使用mousei也会触发。我的意思是,即使不单击鼠标也要更改激发。单击
不单击鼠标也会激发事件:),但在复选框
中,状态将在每次单击时更改。你能指出他们工作的不同环境吗<代码>更改
是状态发生更改时,其中是单击
简单单击事件。i、 e.状态发生变化(选中/未选中);当用户单击时会触发as click,让我知道这是否有意义,@Jashwant lol bro您正在绑定单击带有切换的事件,然后解除绑定
为什么<代码>:)
==>.unbind('click').bind('change',cb)
或.unbind('change')。bind('click',cb)
Bazinga?我正在绑定/解除绑定单击和更改事件上的复选框
上的每个单击按钮
。这有什么不对吗?Hiya@Jashwant不确定这样做会取得什么效果,这就是我的意思,不管怎样,我都快迟到了,所以我要睡觉了,放松点,干杯:)
点击不会通过键盘触发应该是不言自明的,这是一个很好的观点。但是它似乎失败了复选框恰好是一种特殊情况,在这种情况下,更改和单击是可交换的,因为如果不触发单击,就无法触发更改事件我只需要这样一个简单明了的词。我会等一会儿。如果没有人反对你的话,你就会得到赏金。@pozs,也会有很大的不同。但是你应该得到一笔奖励,因为你把所有的东西都加起来了,你还应该得到一个w3c链接,用于键盘onclick
。如果您使用的是IE10/11,如果复选框处于不确定状态(即使您单击它),则不会由于错误而触发“更改”事件。请参阅错误“单击”事件将可靠地触发,但答案中的这一部分“复选框恰好是更改和单击可交换的特殊情况,因为您无法在不触发单击的情况下触发更改事件。”对大多数情况都是正确的