Javascript jQuery选择更改/单击问题-更改在IE中不起作用,单击在Chrome中不起作用
正如标题所说,我在绑定到下拉选择列表中的更改时遇到了一个问题-似乎更改不适用于IE7或IE8,因此当我尝试替代方案并使用单击事件时,它在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
//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-为我改进代码!问题是您可能不希望在仅单击“选择”框时触发事件。单击会下拉选择选项。它不应该触发与选择这些选项之一相关的事件