将.keyup绑定到动态创建的元素

时间:2013-07-28 07:54:16

标签: javascript bind dynamic-data keyup

我已经看到了很多关于此的问题,但我仍然感到难过。我真的可以帮助理解我在这里做错了什么。

(我的术语可能在下面不正确)

我有一个textarea和一个.keyup函数,它按类名

绑定到它

这第一个textarea激活函数

然后我动态添加第二个textarea,用于触发相同的函数

我的.keyup功能

$('.trans').keyup(function() {
    alert("Working");

});   

据我所知,上面的内容对新创建的textarea不起作用,因为它在绑定函数时不是DOM的一部分。我已经尝试了几个针对其他问题但是似乎无法解决这个问题:

我试过的其他事情:

// I also tried this   
// Neither textarea responds if this is used     
 $('.trans').on('keyup', '.newTrans', function() {
    alert("Working");
 }); 


// I also tried this 
// Only the first textarea responds    
 $('.trans').delegate('.newTrans', 'keyup', function(){
   alert("Working");
 });

这是一个JSfiddle,如果需要,可以使用更多的代码:

jSfiddle

2 个答案:

答案 0 :(得分:5)

.on() method根本不适用于你的小提琴,因为你在引入.on()之前指定了旧版本的jQuery。

如果你升级到更新版本的jQuery(至少1.7),你可以这样做:

 $(document).on('keyup', '.trans', function() {
    alert("Working");
 }); 

演示:http://jsfiddle.net/VFt6X/4/

如果由于某种原因需要继续使用v1.6.4,请改用.delegate() method

 $(document).delegate('.trans', 'keyup', function() {
    alert("Working");
 }); 

演示:http://jsfiddle.net/VFt6X/5/

请注意,无论哪种方式,您关注的元素的'.trans'选择器都作为参数传递给函数。左侧的$(...)部分必须指定一些已存在的容器。我使用了document,但如果可能的话,最好指定更接近相关元素的内容,因此在您的情况下,您可以使用$("#centerNotes")

答案 1 :(得分:2)

试试这个:

$('.trans').live('keyup', function() {
    alert("Working");
});

http://jsfiddle.net/VFt6X/3/