我有一个页面,其中可变数量<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的变化不会触发事件。 任何人都知道为什么吗? 谢谢!
该change
事件不会在IE泡沫(见这里和这里 )。 你不能串联使用事件委派它。
事实上,正是因为这个IE bug,它的jQuery live
不得不正式排除change
从支持的事件列表 (FYI的DOM规范状态change
应该泡 )。 [ 1 ]
关于你的问题,你可以直接绑定到每一个选择:
$('#container select').change(/*...*/)
如果你真的想事件委派你可能会发现一些成功尝试什么这个人当初并绑定到click
只有IE浏览器,它不泡:
$('#container').bind($.browser.msie ? 'click' : 'change', function(event) {
/* test event.type and event.target
* to capture only select control changes
*/
})
但这种浏览器检测感觉真的错了。 我真的尝试用前者的例子(直接绑定到下拉菜单)工作。 除非你有数以百计的<select>
盒,事件代表团不会买你多少反正这里。
[ 1 ]注:jQuery的> = 1.4现在模拟鼓泡change
通过在IE事件live()
/ on()
想法,可能会有所帮助:
$(document).ready(function() {
$('#container select[name="mySelectName"]').change(function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
如果你正在使用AJAX,尝试活()函数:
$(document).ready(function() {
$('#container select[name="mySelectName"]').live('change', function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
如果我没有记错,你将需要调用模糊()拥有jQuery的调用变化()在IE浏览器的机器。 尝试是这样的:
$("select[name=mySelectName]").click(function() {
$(this).blur();
});
使用jQuery 1.4.4(我想1.4.3)现在似乎被大家看好....变化事件在我有限的测试中都能正常工作。
添加此行到您的网页头,高枕无忧! :)
$(document).ready(function(){$('select').bind('onChange',function(){$(this).blur()});});
onchange=doAction
将在IE和Firefox的工作,但它在Chrome不支持。
你需要使用jQuery的.change
事件来处理这个问题。
我试图理解为什么你需要加倍接收事件之后检查选择的名称。
你能找有相同ID的多个元素?
你真的意思是说“#container的选择”,而不是“#container的”?
我只是建立在由“新月肉”的跨平台的解决方案,将通过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()函数,将其重命名任何你想要的。
IE需要放置里面的文件准备好改变事件。 这似乎改变事件绑定到相关的元素。 希望能帮助到你。
:d:d哇,我是找到解决办法......为什么会想到这么复杂? 只是:
<select onchange="doAction">