我下面有一个jquery脚本来根据选项交换一个选择框,它在Firefox中工作正常,但它在IE中没有做任何事情,但IE也没有显示任何错误,我真的希望有人可以指出我正确的方向。任何帮助都将非常感激:
$(".initDealers").change(function () {
if ($('.initDealers option:selected').val() == "All" ) {
$('.allDealers').show();
$('.initDealers').hide();
} else {
$('.initDealers').show();
}
});
答案 0 :(得分:2)
IE无法识别选择框已更改,直到您将焦点移离字段。
这是由于IE使用Windows selectbox控件的方式;它在这方面有效地像插件一样工作。在分层时,您可能还会注意到IE中有选择框的怪癖;选择框有一个总是显示在顶部的习惯,即使你有其他元素覆盖它们。这也是由同样的事情造成的。
快速解决方案是捕获click
事件而不是change
事件。然后,当用户进行更改时,这将会启动,而无需等待他们将焦点从场地更改。
然而,即便如此,您也会遇到问题,因为click
事件没有获取使用键盘所做的更改,因此您可以使用Tab键导航到该字段并更改它,并{{1} 1}}事件永远不会被解雇。
因此,您可能需要同时捕获click
和click
事件。当然,你最终会遇到可能不止一次捕获相同变化的问题。它并不理想,你需要为它编写代码,但它是捕捉用户改变字段的所有可能方式的唯一方法。
它仍然不完美,因为如果用户使用键盘导航和更改字段,他们可以在选择列表中上下移动到他们内心的内容,但是在移开之前你不会触发任何事件来自外地。这是不可避免的。
答案 1 :(得分:1)
尝试使用.click
代替.change
Getting jQuery to recognise .change() in IE
你可以这样做:
$('select').bind($.browser.msie ? 'click' : 'change', function() {});