2016-07-06 91 views
0

我有一個腳本,它動態地添加了<tr>,外面似乎它所包含的元素沒有被jQuery識別,因爲它尚未加載到DOM中。綁定不在DOM中的元素

我嘗試使用.on函數,但它不工作。

你有什麼想法嗎?

$(document).ready(function(){ 
    $("#add_item").click(function(e){ 
    e.preventDefault(); 
    var nbeTr = $(".tablerow").length; 
    if (nbeTr < 10){ 
     $(".tablerow:last").after("<tr class='filleul'><td></td><td></td><td></td><td><button class='newtr'>X</button></td></tr>"); 
    } 
    }); 
    $(document).on("click", ".newtr", function(event) { 
    event.preventDefault(); 
    alert("Yo"); 
    }); 
}); 
+2

請分享您的HTML。 –

+0

小提琴示例https://jsfiddle.net/z7wk5j1b/ – DaniP

+0

基於我做的小提琴...我猜這不起作用,因爲您使用的是Jquery的錯誤版本,在前一個小提琴中使用了v1.6,噸工作,但高於1.7你的代碼將工作https://jsfiddle.net/z7wk5j1b/1/ – DaniP

回答

0

創建按鈕元素時需要註冊事件偵聽器。現在,您正試圖將點擊事件註冊到未定義的元素。

// create button 
$ele = $("<button class='newtr'>X</button>"); 
// bind event listener to button 
$ele.on("click", function() { alert("hello"); }); 
// insert $ele into DOM 
$target.append($ele); 
0

嘿巴克你的代碼工作,我認爲問題是一些其他地方。

見該工作示例:

$(document).ready(function() { 
 
    $("#add_item").click(function(e) { 
 
    e.preventDefault(); 
 
    var nbeTr = $(".tablerow").length; 
 
    if (nbeTr < 10) { 
 
     $(".tablerow:last").after("<tr class='tablerow filleul'><td>1</td><td>2</td><td>3</td><td><button class='newtr'>X</button></td></tr>"); 
 
    } 
 
    }); 
 
    $(document).on("click", ".newtr", function(event) { 
 
    event.preventDefault(); 
 
    alert("Yo"); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<button id='add_item'>Add item</button> 
 
<table> 
 
    <tr class='tablerow'> 
 
    <td>c1</td> 
 
    <td>c2</td> 
 
    <td>c3</td> 
 
    <td> 
 
     <button class='newtr'>X</button> 
 
    </td> 
 
    </tr> 
 
    <table>

+0

反對的任何理由? –

+0

沒有downvote,但這個答案不提供任何新的問題;根本沒有回答爲什麼這個代碼不適用於OP ...您可以要求澄清意見,因爲您可以看到指出實際的代碼工作。 – DaniP

+0

是的,這是jQuery正在使用的錯誤版本,並且刷新不良(緩存可能?)它現在正在工作! – Buck

0

好了,問題是在使用jQuery的版本有誤。

我只是使用最後jQuery版本的CDN和刷新緩存,它的工作。

相關問題