在Internet Explorer中,<select>的onChange事件从未触发

4
我正在使用jQuery将事件绑定到以下方式的onChange处理程序:

$("#accounts").change(function() { DoSomething(); });

我遇到的问题是,在Firefox中一切正常,但在IE中事件从未触发。我知道IE处理onChange事件与Firefox不同,如此处以及其他地方所述。然而,在此情况下,即使单击屏幕上的其他元素,事件仍然无法触发,因此我不认为这是问题所在。
仅为了确保jQuery代码没有问题,我尝试了像这样内联实现onChange事件:
<select id="accounts" onChange="DoSomething();">
    <option value="1">Account 1</option>
    <option value="2">Account 2</option>
    {omitted remaining 3000 options of list for brevity}
</select>

但是即使按照这种方式实现,事件仍然没有被触发。
目前,我已经改变了代码,使用onClick事件,因为页面流量较低,被调用的函数也相当廉价。尽管如此,我仍希望弄清楚问题所在,因为我确定将来还会遇到类似的情况。

你确定你是在更改所选元素,而不仅仅是选择一个元素吗? - strager
1
请发布包括内部选项的完整选择语句。 - Justin Johnson
3
下拉列表中有3000个选项,很高兴我不必选择其中之一 :( - Pharabus
@Justin,我已经将页面上的一些选项添加进去了。 - Hamman359
1
也许IE不太喜欢处理一个选择元素中的3000个选项,并拒绝触发onchange处理程序...有人尝试过吗? - Andy E
显示剩余2条评论
2个回答

2
这可能可以通过在IE浏览器中使用setTimeout时将DoSomething调用放入另一个线程中来解决。
if (jQuery.browser.msie) { setTimeout(DoSomething, 0); } else { DoSomething(); }

根据微软的说法,这可能是由于发生了竞争条件。请告诉我们这是否对您有用。

你能发一下关于竞争条件的微软文章链接吗?谢谢! - Mnebuerquo
已更新URL - http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/958a24b7-775e-434b-9fd4-58f72ecbb759 - spig

2

有时候,当您的标记未正确包含在HTML层次结构中时,可能会出现这种情况。这可能是导致问题的原因,我也曾遇到过类似情况,一旦我更正了标记,它就可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接