在Internet Explorer(IE)中未触发的jquery更改事件

Jos*_*ose 3 jquery cross-browser

好的,我知道还有其他与我有关的问题,但我读过的都没有回答我的问题.

我有一个select标签,其中包含一些我更改事件的选项,但是当用户点击一个选择框然后按下向上/向下时,更改事件不会在IE中触发.它在Firefox中启动,我还没有检查过Chrome.

所以我想我想知道是否有一个简单的解决方案,我想这样做

$("#selector").change(function () {//Add code });
Run Code Online (Sandbox Code Playgroud)

我现在的解决方法是这样做:

$("#selector").bind('change keyup',function () {//Add code });
Run Code Online (Sandbox Code Playgroud)

我想我可以像这样创建一个插件:

$.fn.myChange = function (fcn) { return this.bind('change keyup',fcn);}
Run Code Online (Sandbox Code Playgroud)

我的主要想法是jquery作为一个库应该抽象出浏览器(in)兼容性的丑陋细节,所以我更喜欢我仍然可以使用base .change函数而不必担心我在浏览器上.

我只是想知道这是不是应该这样做的.有更好的方法吗?

更新:

我向jquery团队提交了一个错误,看看他们的想法.

这是一个显示问题的示例.打开它,点击进入选择框,然后按向上/向下键.您会注意到,当FF和Chrome执行时,IE不会触发更改事件.

Mar*_*iss 5

在您的示例中,如果您进行此更改,它将起作用:

$("#sel").bind($.browser.msie ? 'propertychange' : 'change', function(e) {
    $("#output").append("boxval changed!" + $(this).val());
});
Run Code Online (Sandbox Code Playgroud)

请注意,我添加了+ $(this).val()所以你可以看到它适用于实际值.

你可以在这里看到它:http://jsfiddle.net/At8Ht/3/

请注意,这也可以这样做:(删除浏览器嗅探)但我没有在所有浏览器中测试过.

$("#sel").bind('propertychange change', function(e) {
    $("#output").append("boxval changed!" + $(this).val());
});
Run Code Online (Sandbox Code Playgroud)