2010-11-08 30 views
1

后创建的元素:如果我把这个jQuery并不适用于页面加载

$(".month-selector").change(function(){ 
    setStones(); 
}); 

$(document).ready()里面它并不适用于以后创建的元素。我也尝试在创建它们之后调用上面的代码,如下所示:

$("#month-selectors").html(month_selectors); 

$(".month-selector").change(function(){ 
    setStones(); 
}); 

它仍然不起作用。但是,如果我创建一个静态的,它的工作。

如何在页面加载后创建它们时将此应用于元素?

+0

附注...您不需要'function(){setStones(); }',你可以通过'setStones'函数作为事件处理函数:'$(“。month-selector”)。change(setStones)' – gnarf 2010-11-08 20:55:18

+0

@gnarf,谢谢!我知道这一点,但我原本以为我会需要参数,然后没有,所以我忽略了这一点。感谢您指出了这一点! :) – 2010-11-08 20:59:01

回答

14

您可以使用jQuery的'live()'方法将事件侦听器添加到当前和未来的节点。

$(".month-selector").live('change', function(){ 
    setStones(); 
}); 
+0

这是我正在寻找的解决方案。当分配时间结束时,我会在12分钟内标记出您的正确答案。 – 2010-11-08 20:53:25

+0

这只适用于jQuery版本1.3+ – RedWolves 2010-11-08 20:54:02

+0

实时方法的缺点是什么?我猜一些额外的开销,因为jquery必须观看DOM才能出现新节点? – CodexArcanum 2010-11-08 20:55:46

0

尝试:

$(".month-selector").live("change", function(event) { 
// some code 
}); 
2

这是超级有帮助!但是,如果您在DOM已加载后添加输入事件,则需要使用“单击”事件才能使其工作:

$("input#thename").live("click", function(event) { 
// handler for what should happen when somebody clicks on the new input field, in this case I needed a datepicker to pop up so lets get that fired. Now that the click element registered the new input object with the DOM, it can be used like a normal jQuery selector! 
    $("input#thename").datepicker(); 
    }); 
+0

但由于某种原因。我必须在输入框上点击两次才能让日期选择器显示...有关如何解决的任何想法? – 2011-07-04 20:00:59

相关问题