2012-08-09 25 views
12

我已在在头下面:的jQuery在<select>更改事件不触发

$('body').on('change', '#userFilter', function(){ 
    console.log('changed'); 
}); 

,并在单击标签在此元素动态插入到网页中:

<select id="userFilter"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

的问题当我更改下拉框时,控制台中不显示任何内容。

+2

适合我的作品:http://jsfiddle.net/KhY8s/。确保在'body'存在时绑定事件处理器(jQuery 101)。从[jQuery **教程**](http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Hello_jQuery):*“几乎当我们使用jQuery读取或操作文档对象模型(DOM)时,我们所做的一切,我们需要确保我们在DOM准备就绪后立即开始添加事件等。为此,我们为文档注册一个准备事件。“*。为什么看起来没人阅读? – 2012-08-09 14:44:52

+0

请打勾答案然后:) – Archer 2012-08-09 15:00:20

+1

只是一个简短的说明,以帮助其他谁可能犯了同样的愚蠢的错误 - 确保你没有意外重复的ID,例如,如果你碰巧有一个与你的过滤器相同的ID ,变化事件不会发射! – Steve 2015-05-06 16:12:50

回答

18

敷在$(document).ready(function(){....})使得HTML控制userFilter被添加到DOM以及可用于javascript

$(document).ready({ 
    $('body').on('change', '#userFilter', function(){ 
     console.log('changed'); 
    }); 
}); 

传递给。就绪(处理程序)是保证被执行之后的 DOM是就绪,所以这通常是附加所有其他事件处理程序并运行其他jQuery代码jQuery docs的最佳位置。

+0

修复它。谢谢! – 2012-08-09 14:50:25

+1

不客气 – Adil 2012-08-09 14:50:58

+0

我在UpdatePanel内部有一个TextArea,上面的内容对我来说不起作用:/任何建议?谢谢。 – SearchForKnowledge 2014-08-28 18:44:11

0

虽然有点与OQ无关,但如果您因为您的选择没有触发而到达此处,请确保在之前没有选中“阻止此页面显示...” alert()。您需要关闭该选项卡,然后重新打开该URL以使其再次可见。