2011-04-28 208 views
0

我已经克隆了一个表(带有选择)以复制到其他地方。这个工程很好,我设法改变身份证,不用担心。问题是,如果我尝试将更改事件绑定到每个事件,它会永远不会触发吗?这里有明显的错误吗?谢谢。更改事件未触发

<script type="text/javascript"> 
      $(document).ready(function() { 
       var variants = $("table.variantselection").clone(false); 

       variants.find("select").each(function (i, o) { 
        $(this).attr("id", $(this).attr("id") + "_popup"); 
       }); 

       variants.find("select").change(function() { 
        alert($(this).val()); // never reaches this alert 
       }); 

       variants.appendTo("#popup_variants");    
      }); 
     </script> 

回答

1

false改为true的事件处理程序与DOM元素

var variants = $("table.variantselection").clone(true); 

做不到这一点拷贝,使用实时()事件绑定:

variants.find("select").live("change", function() { 
    alert($(this).val()); 
}); 
+0

神圣烟 - 这个作品!我一直在与现场窃听,但不知道为什么它现在起作用。感谢你能这么快回复! – janhartmann 2011-04-28 12:26:56

+0

无论如何,我可以保留复制的选择字段的用户选择值吗? – janhartmann 2011-04-28 13:14:08

0

尝试绑定.change()功能后你重新连接克隆到DOM。

0

由于看来#popup_variants是在您的桌子上的父元素,您可能会更好使用.delegate()

$(document).ready(function(){

$("#popup_variants").delegate("select", "change", function(){ 
    alert($(this).val()); 
}); 

var variants = $("table.variantselection").clone(false); 

variants.find("select").each(function(i, o) { 
    $(this).attr("id", $(this).attr("id") + "_popup"); 
}); 

variants.appendTo("#popup_variants"); 

});