复选框上.click和.change之间的区别是什么

时间:2011-04-07 02:40:31

标签: javascript jquery checkbox click

我正在寻找一个复选框添加一个事件,我原以为人们会使用.change来设置更改事件,但我发现人们正在使用.click

这有什么理由吗?它们似乎都适用于点击事件和键盘更改。我错过了什么吗?

如果你不相信我,那么 try it out yourself

5 个答案:

答案 0 :(得分:36)

IE中的

onchange仅在复选框失去焦点时触发。因此,如果您向其添加标签,请多次点击空格,标签,您只会获得一个onchange个事件,但会有多个onclick个事件。

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

答案 1 :(得分:6)

onclick优先于onchange的两个原因。

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

  2. onchange只有在元素失去焦点后才会发生。(您不会看到差异,因为您正在调用警报并且失去对每次更改的关注)。 MDC上的伪代码几乎解释了element.onchange实现。

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

答案 2 :(得分:0)

对于密钥更改(用户选择带有向上/向下箭头键的选项),

.change对于至少一些流行的浏览器不能正常工作,但是.click也没有克服这个问题。有时使用keyup或keydown或其他东西与.change一起使用来克服这个问题,但是当你用户选择文档时它会开始变得有点乱,因为如果没有在回调中明确处理它,它可以触发键事件。总而言之,令人遗憾的是.change无法正常工作,因为它可以解决一些耗时的问题。

答案 3 :(得分:0)

是的,两者都有效,只有点击不会看实际的对象变化(比如一个被检查的复选框),改变了。

从技术上讲,它更可靠,但在实践中两者都有效。

答案 4 :(得分:0)

默认情况下,它们可能会触发值的更改,但您可以覆盖onClick逻辑以不更改chackbox的值。您可以通过另一个入口点更改该值。因此需要.click和.change。

编辑 - 我也同意Rob博士