【问题标题】:bind .keyup to dynamically created element将 .keyup 绑定到动态创建的元素
【发布时间】:2013-07-28 07:54:15
【问题描述】:

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

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

我有一个 textarea 和一个按类名绑定到它的 .keyup 函数

第一个文本区域很好地触发了函数

然后我动态添加第二个文本区域,用于触发相同的功能

我的 .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

【问题讨论】:

    标签: javascript bind dynamic-data keyup


    【解决方案1】:

    .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")

    【讨论】:

    • DelightedD0D 在 jsFiddle 上使用 jQuery 1.6.4
    • 谢谢@Heejin,是的,我刚去更新的时候注意到了。
    • 我确实需要坚持使用 v1.6.4。由于它们都起作用,$(document).delegate$('.trans').live Heejin 下面使用的有什么区别?
    • 好吧,.live() 已被弃用,并已从 1.9 版中删除,因此最好不要使用它,这样如果您将来升级到更新的 jQuery,您就不必更改代码。但是.live() 的效率也低于.delegate(),因为它的实现方式,所以我不会使用.live(),除非你必须使用早于1.4.2 的jQuery 版本,而你不能使用@987654341 @。在its doco page 上列出的.live() 有几个特定的​​缺点。
    【解决方案2】:

    试试这个:

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

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

    【讨论】:

    • +1,此方法确实有效。上面接受,因为它帮助我更好地理解我做错了什么。
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 2012-04-03
    • 2014-10-15
    • 2016-08-13
    • 2013-11-20
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多