IE中的.change函数问题

时间:2011-02-08 10:14:39

标签: jquery internet-explorer

我下面有一个jquery脚本来根据选项交换一个选择框,它在Firefox中工作正常,但它在IE中没有做任何事情,但IE也没有显示任何错误,我真的希望有人可以指出我正确的方向。任何帮助都将非常感激:

$(".initDealers").change(function () {   

    if ($('.initDealers option:selected').val() == "All" ) {

       $('.allDealers').show();

       $('.initDealers').hide();

    } else {

        $('.initDealers').show();

    }
});

2 个答案:

答案 0 :(得分:2)

IE无法识别选择框已更改,直到您将焦点移离字段。

这是由于IE使用Windows selectbox控件的方式;它在这方面有效地像插件一样工作。在分层时,您可能还会注意到IE中有选择框的怪癖;选择框有一个总是显示在顶部的习惯,即使你有其他元素覆盖它们。这也是由同样的事情造成的。

快速解决方案是捕获click事件而不是change事件。然后,当用户进行更改时,这将会启动,而无需等待他们将焦点从场地更改。

然而,即便如此,您也会遇到问题,因为click事件没有获取使用键盘所做的更改,因此您可以使用Tab键导航到该字段并更改它,并{{1} 1}}事件永远不会被解雇。

因此,您可能需要同时捕获clickclick事件。当然,你最终会遇到可能不止一次捕获相同变化的问题。它并不理想,你需要为它编写代码,但它是捕捉用户改变字段的所有可能方式的唯一方法。

它仍然不完美,因为如果用户使用键盘导航和更改字段,他们可以在选择列表中上下移动到他们内心的内容,但是在移开之前你不会触发任何事件来自外地。这是不可避免的。

答案 1 :(得分:1)

尝试使用.click代替.change

Getting jQuery to recognise .change() in IE

你可以这样做:

$('select').bind($.browser.msie ? 'click' : 'change', function() {});