.click和.change之间的checkbox有什么区别
我正在四处张望添加一个事件到一个checkbox,我会认为人们会使用.change
来设置一个更改事件,但是我发现人们正在使用.click
这是有原因吗? 他们似乎都工作正常,与单击事件和键盘更改。 我错过了什么吗?
如果你不相信我,那就自己尝试一下
IE中的onchange
仅在checkbox失去焦点时才会触发。 所以,如果你选中它,点击空格,然后退出,你只会得到一个onchange
事件,但是有几个onclick
事件。
注意:IE浏览器的行为是正确的(根据规范)和其他浏览器是错误的,这是非常非常非常罕见的时代之一。
onclick
优于onchange
两个原因。
-
当checkbox失去焦点(onblur)时,Internet Explorer仅触发onchange事件。 所以
onclick
更像是一个跨浏览器的解决scheme。 -
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。
编辑 – 我也同意罗博士