我有一个包含可变数量的<select>
元素的页面(这解释了我在这里使用事件委托的原因)。当用户更改所选选项时,我想在页面上隐藏/显示不同的内容区域。这是我的代码:
$(document).ready(function() {
$('#container').change(function(e) {
var changed = $(e.target);
if (changed.is('select[name="mySelectName"]')) {
// Test the selected option and hide/show different content areas.
}
});
});
这适用于Firefox和Safari,但在IE中,更改事件不会触发。谁知道为什么?谢谢!
答案 0 :(得分:71)
change
事件未在IE中冒泡(请参阅here和here)。您不能将事件委托与其一起使用。
事实上,正是由于这个IE bug,jQuery live
必须从list of supported events正式排除change
(原始数据显示DOM规范change
should bubble)撞击> [1]
关于您的问题,您可以直接绑定到每个选择:
$('#container select').change(/*...*/)
如果您真的想要事件委派,那么可能会在IE中尝试this person did并绑定到click
找到一些成功,其中 冒泡:
$('#container').bind($.browser.msie ? 'click' : 'change', function(event) {
/* test event.type and event.target
* to capture only select control changes
*/
})
但是这种浏览器检测确实是错误的。我真的尝试使用前一个例子(直接绑定到dropdown)。除非你有数百个<select>
框,否则事件授权在这里不会给你带来太大的帮助。
[1]注意:jQuery&gt; = 1.4现在通过live()
/on()
模拟IE中的冒泡change
事件。
答案 1 :(得分:3)
可能有所帮助的想法:
$(document).ready(function() {
$('#container select[name="mySelectName"]').change(function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
如果您使用的是AJAX,请尝试live()功能:
$(document).ready(function() {
$('#container select[name="mySelectName"]').live('change', function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
答案 2 :(得分:3)
如果我没记错的话,你需要调用blur()让jQuery在IE机器上调用change()。尝试类似:
$("select[name=mySelectName]").click(function() {
$(this).blur();
});
答案 3 :(得分:3)
使用jquery 1.4.4(我认为1.4.3)现在似乎都很好....变更事件在我的有限测试中始终如一。
答案 4 :(得分:1)
将此行添加到您的页面头部,坐下来放松一下! :)
$(document).ready(function(){$('select').bind('onChange',function(){$(this).blur()});});
答案 5 :(得分:1)
onchange=doAction
可以在IE和Firefox中使用,但Chrome不支持。
您需要使用jQuery的.change
事件来处理此问题。
答案 6 :(得分:0)
我正在尝试理解为什么在收到事件后需要仔细检查选择名称。
您是否有任何机会拥有多个具有相同ID的元素?
你真的想说“#container select”而不是“#container”吗?
答案 7 :(得分:0)
我只是在“Crescent Flesh”设置的示例基础上构建了一个跨平台的解决方案,即使通过AJAX调用将此SELECT加载到#container中也能够存活。
$('#container').bind($.browser.msie ? 'click' : 'change', function(event) {
if ((event.type == 'click') || (event.type == 'change')) {
if (event.target.toString().indexOf('Select') != -1) {
var sWhich = $('#container SELECT').val();
handleSelectionChange(sWhich);
}
}
});
现在您只需构建handleSelectionChange()函数,并根据需要重命名它。
答案 8 :(得分:0)
IE要求将更改事件放在文档准备就绪中。这似乎将change事件绑定到关联元素。希望它有所帮助。
答案 9 :(得分:-2)
:D:D哇,我找到了解决方案......为什么这么复杂?
简单地说:
<select onchange="doAction">