复选框上的 .click 和 .change 有什么区别

IT技术 javascript jquery checkbox click
2021-01-15 16:52:31

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

是否有一个原因?它们似乎都适用于单击事件和键盘更改。我错过了什么吗?

如果你不相信我,那就自己试试吧

5个回答

onchange在 IE 中,仅当复选框失去焦点时才会触发。因此,如果您按 Tab 键,按空格键几次,再按 Tab 键,您只会得到一个onchange事件,但会得到多个onclick事件。

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

也很有趣不知道你点击这样的东西
2021-03-26 16:52:31
值得注意的是, onchange 仅在文本字段中的焦点发生变化时触发 - 我不知道复选框的行为有所不同,但我想这是因为它们的焦点没有明确定义。
2021-03-30 16:52:31
实际上它也适用于点击。如果您单击复选框两次,然后单击其他位置,您将不会收到onchange事件(单击它两次会将其返回到初始值),但您会收到两个onclick事件。
2021-04-10 16:52:31

有两个原因onclick优于onchange.

  1. Internet Explorer 仅在复选框失去焦点 (onblur) 时触发 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();
    }
    
你的链接说平均 45% :)
2021-03-24 16:52:31
提到了网络应用程序共享:)
2021-03-24 16:52:31
@cwolves:我知道。但 56% 的用户仍在使用 IE :) en.wikipedia.org/wiki/Usage_share_of_web_browsers
2021-03-28 16:52:31
:) 无论如何它比我最初预期的要少得多。从程序员的角度来看,这非常好:)
2021-04-04 16:52:31
仅供参考,除 IE 之外的所有浏览器(以及 FF、Chrome、Safari)都会立即在复选框上触发 onchange。
2021-04-05 16:52:31

.change 至少在一些流行的浏览器中无法正常工作,与键更改(用户使用向上/向下箭头键选择选项)有关,但 .click 也不能克服这个问题。有时使用 keyup 或 keydown 或其他东西与 .change 结合使用来解决这个问题,但是当您用户选项卡文档时它开始变得有点混乱,因为如果它没有在回调中明确处理,这可能会触发键事件。总而言之,很遗憾 .change 不能像您期望的那样工作,因为它可以解决一些耗时的问题。

是的,两者都有效,只有单击不会查看实际对象的变化(例如选中的复选框),但更改确实如此。

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

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

编辑 - 我也同意 Rob 博士的观点