Javascript onChange箭头键

tey*_*non 8 javascript onchange arrow-keys

好的,所以我们都知道onChange用于在选项更改时在select语句上执行javascript代码.但是,如果使用箭头键更改select语句,则不会调用onChange事件.有没有解决的办法?请帮忙!我知道,我是强迫症.

--EDIT 1--

刚刚在IE中测试了这个并且箭头键确实有效.显然它只是Chrome.**去检查firefox

- 编辑2 -

在Firefox中测试并在下面的答案之前实现了改变所需的onBlur操作.所以这里的答案是:

Internet Explorer从键盘识别onChange事件并单击它们.Firefox和Chrome都要求关键事件后跟模糊事件才能调用onChange.

现在通常,我不喜欢Internet Explorer,因为它是一块垃圾......但我想......不幸的是,不得不说他们得到了那个.

我对chrome和firefox上模糊事件的推理的理解是节省资源,但我不同意这一点.我觉得它应该遵循命令onChange的字面解释......叹息......我想我不管怎么说我可能错了.

tey*_*non 4

回到这一点,似乎自从提出这个问题以来,Chrome 现在在关键事件后触发 onChange。Firefox 似乎仍在等待 onblur。http://jsfiddle.net/2aQBN/

$(document).ready(function() {
    $("#test").on("change", function() {
        console.log("Changed.");
    });
});
Run Code Online (Sandbox Code Playgroud)

W3C 规范似乎建议使用input事件来代替。

当应用输入事件时,每当用户导致元素的值发生更改时,用户代理都必须将任务排队以触发一个简单事件,该事件在输入元素处冒泡命名输入。

但是,在Chrome 或Firefox 中,选择元素似乎不会触发任何输入事件。(只需输入元素。)

测试展示当前值与最后一个 onchange 值。

http://jsfiddle.net/teynon/MpyHK/5/

Firefox 将在鼠标悬停时更改该值。键的改变也会改变值。但是,onchange 尚未触发。如果在用户打开选择菜单时提交表单,则提交当前突出显示的选项。

来自 W3C:

如果缺少 multiple 属性,并且该元素未禁用,则用户代理应允许用户在其选项列表中选择一个本身未禁用的选项元素。在选择此选项元素后(通过单击,或通过更改其值后取消焦点元素,或通过菜单命令,或通过任何其他机制),并且在相关用户交互事件排队之前(例如,在单击事件之前) ),用户代理必须将选取的选项元素的选择性设置为 true,然后使用用户交互任务源作为任务源,将任务排队以触发一个简单事件,该事件在选择元素上冒泡命名为 Change。

https://bugzilla.mozilla.org/show_bug.cgi?id=126379对此进行了长时间的讨论,许多人要求使用箭头键来工作。(还有一些人捍卫 onchange 方法。)

一些用户认为 W3C 在select元素change事件的规范中完全是错误的。相反,建议我们建议对规范进行更改,以了解我们期望的select功能如何onchange工作。

仅根据错误报告的数量,当前的功能显然对很多人来说并不直观。(Mozilla 有 40 个标记为重复项。)