.click和.change之间的checkbox有什么区别

我正在四处张望添加一个事件到一个checkbox,我会认为人们会使用.change来设置一个更改事件,但是我发现人们正在使用.click

这是有原因吗? 他们似乎都工作正常,与单击事件和键盘更改。 我错过了什么吗?

如果你不相信我,那就自己尝试一下

IE中的onchange仅在checkbox失去焦点时才会触发。 所以,如果你选中它,点击空格,然后退出,你只会得到一个onchange事件,但是有几个onclick事件。

注意:IE浏览器的行为是正确的(根据规范)和其他浏览器是错误的,这是非常非常非常罕见的时代之一。

onclick优于onchange两个原因。

  1. 当checkbox失去焦点(onblur)时,Internet Explorer仅触发onchange事件。 所以onclick更像是一个跨浏览器的解决scheme。

  2. onchange只有在元素失去焦点之后才会发生(你没有看到区别,因为你正在调用alert并且把注意力集中在每个改变上)。 MDC上的伪代码很好的解释了element.onchange实现。

     control.onfocus = focus; control.onblur = blur; function focus () { original_value = control.value; } function blur () { if (control.value != original_value) control.onchange(); } 

.change至less有一些stream行的浏览器与键更改(用户使用上/下箭头键select选项)不能正常工作,但是.click也没有克服这一点。 有时使用keyup或keydown或者与.change一起使用来解决这个问题,但是当用户选中文档时,它开始变得有些混乱,因为如果在callback中没有明确地处理它,这可能触发关键事件。 总而言之,.change不能像你期望的那样工作,因为它可以解决一些耗时的问题。

是的两个工作,只有点击不看实际的对象更改(如checkbox被检查),更改。

从技术上讲,这是更可靠的,但在实践中这两个工作。

它们都可以在默认情况下触发该值的更改,但是您可以重写onClick逻辑以不更改chackbox的值。 您可以通过另一个入口点更改值。 所以需要一个.click和一个.change。

编辑 – 我也同意罗博士