Javascript onblur事件不';当点击被禁用的按钮元素时,不会在Chrome中触发-在IE中工作

Javascript onblur事件不';当点击被禁用的按钮元素时,不会在Chrome中触发-在IE中工作,javascript,google-chrome,Javascript,Google Chrome,我有一个禁用的按钮,当输入元素中有文本时,该按钮应该启用。启用/禁用按钮的代码位于输入的onblur事件中。我的HTML由一个带有id=“in”的输入、一个带有属性disabled=“disabled”的按钮和一个带有id=“sp”的span组成 在IE 9中,如果我在输入元素中键入文本并单击禁用按钮,则输入的onblur将触发,按钮将启用,并且我将获得按钮的单击事件。 然而,在Chrome中,当我在输入元素中键入文本并单击disabled按钮时,什么也没有发生 我看到的按钮有什么特性吗?我试着

我有一个禁用的按钮,当输入元素中有文本时,该按钮应该启用。启用/禁用按钮的代码位于输入的
onblur
事件中。我的HTML由一个带有
id=“in”
输入、一个带有属性
disabled=“disabled”
按钮和一个带有
id=“sp”
span
组成

在IE 9中,如果我在输入元素中键入文本并单击禁用按钮,则输入的
onblur
将触发,按钮将启用,并且我将获得按钮的单击事件。 然而,在Chrome中,当我在输入元素中键入文本并单击disabled按钮时,什么也没有发生


我看到的按钮有什么特性吗?我试着让
焦点退出
启动,但得到了相同的结果。我使用Firefox也得到了同样的结果。Chrome似乎比IE更严格地对待禁用的
属性,但这会给我们的用户带来问题。当我在禁用按钮上单击关闭输入元素时,如何使
onblur
(或某些等效)事件触发?

在Chrome中,禁用的按钮将删除所有事件侦听器。单击、右键单击、选择开始等对禁用的按钮无效。这意味着当您单击“禁用”按钮时,焦点不会离开输入。您可以通过
class=“disabled”
手动禁用按钮,并添加一些样式使其看起来被禁用。下面是一个CSS示例,可用于使按钮看起来被禁用:

button.disabled,
button.disabled:hover,
button.disabled:active,
button.disabled:focus {
    color:gray;
    background:#EEE;
    border:1px solid #AAA;
    border-radius:3px;
    outline:none;
}

我制作了一个JSFiddle来显示这一点。还请注意,我现在更改了切换禁用类的代码,而不是disabled属性,并且在按钮单击事件处理程序中添加了
if
语句,以便在按钮被禁用时不会触发。

我在回答中添加了一个示例。你可能想检查一下,看看这是否符合你的要求。为什么会发生这种情况?为什么Chrome会删除禁用按钮上的所有事件侦听器?这毫无意义,因为应用
preventDefault
和/或
stopPropagation
相对容易。另外,Firefox甚至IE都没有这样做,尽管在IE中这可能是一个疏忽。@trysis我必须说我不知道。我在web标准上唯一能找到的就是Chrome可能已经采用了该规范并将其应用于所有事件。将其应用于click、mousedown、keydown等只会有意义,所以我可以理解他们是否也将其应用于每个事件侦听器。
button.disabled,
button.disabled:hover,
button.disabled:active,
button.disabled:focus {
    color:gray;
    background:#EEE;
    border:1px solid #AAA;
    border-radius:3px;
    outline:none;
}