Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery选择更改/单击问题-更改在IE中不起作用,单击在Chrome中不起作用_Javascript_Jquery - Fatal编程技术网

Javascript jQuery选择更改/单击问题-更改在IE中不起作用,单击在Chrome中不起作用

Javascript jQuery选择更改/单击问题-更改在IE中不起作用,单击在Chrome中不起作用,javascript,jquery,Javascript,Jquery,正如标题所说,我在绑定到下拉选择列表中的更改时遇到了一个问题-似乎更改不适用于IE7或IE8,因此当我尝试替代方案并使用单击事件时,它在IE中工作,但在Chrome中不工作!我是不是漏掉了什么明显的东西 这是我的密码: //event handler for showing hidden form elements (also ensures only relevant hidden els shown) //IE needs click event instead of cha

正如标题所说,我在绑定到下拉选择列表中的更改时遇到了一个问题-似乎更改不适用于IE7或IE8,因此当我尝试替代方案并使用单击事件时,它在IE中工作,但在Chrome中不工作!我是不是漏掉了什么明显的东西

这是我的密码:

//event handler for showing hidden form elements (also ensures only relevant hidden els shown)
        //IE needs click event instead of change
        $('.select_change').live("change", function(){
            //check if value is other
            if ($(this).val() == 'other') 
                $(this).parent().find(".hidden").show();
            //if user changes select value from other then hide input
            if ($(this).val() != 'other') 
                $(this).parent().find(".hidden").hide();
            return false;
        });
下拉HTML如下所示:

<select id="title" name="title" class="validate[required,funcCall[validateNotDefault]] select_change" >
<option value="default" selected="selected">Please choose from options</option>
<option value="yellow">Yellow</option>
<option value="black">Black</option>
<option value="chocoloate">Chocolate</option>

<option value="other">Other</option>
</select>

尝试改用$.bind或$.change。我以前从未遇到过这个问题

$('.select_change').change(function(){
            //check if value is other
            if ($(this).val() == 'other') 
                $(this).parent().find(".hidden").show();
            //if user changes select value from other then hide input
            if ($(this).val() != 'other') 
                $(this).parent().find(".hidden").hide();
            return false;
        });
在IE中,更改仍然不能完全正确地冒泡,但您可以在两种情况下都这样做:

$('.select_change').live("change click", function(){
   $(this).parent().find(".hidden").toggle($(this).val() == 'other');
});

它仍然使用.live,只对两个事件进行响应……因为你所做的不会因为发射一次或两次而受到伤害,所以在这种情况下这样做是可以的。上面使用的只是稍微短一点,以简化您的逻辑。

我假设您使用的是.live方法,因为在呈现文档后,您可能会添加更多的选择对象。否则.bind或.change应该足以满足您的需要


既然您已经提到过,那么.liveclick将与IE一起使用,而.livechange将与其他任何东西一起使用,您可以使用.liveclick change-Since.live将接受多个以空格分隔的事件。

要解决IE中的更改问题,我就是这么做的

这可能与IE中的输入字段有关。通过创建单独的线程来处理UI更改,onChange应该在IE中正确启动

我通过在变更处理程序中执行以下操作解决了类似情况:

if (jQuery.browser.msie) {
    setTimeout(DoSomeUIChange, 0);
} else {
    DoSomeUIChange();
}

DoSomeUIChange在一个单独的线程中被触发,因此删除了竞争条件。

感谢您的回复-问题是将更改事件绑定到$.live-这似乎是IE的问题,正如Nick Craver指出的那样。感谢Nick-为我改进代码!问题是您可能不希望在仅单击“选择”框时触发事件。单击会下拉选择选项。它不应该触发与选择这些选项之一相关的事件