2012-01-13 106 views
2

我正在做一個動態表來收集乘客的個人數據。 該表格上面有一個控件,用於在最後添加更多行,每一行都是第一個行的副本,並且該表具有作爲最後一個元素的鏈接,用作刪除該行的控件。jQuery on()無法刪除元素

問題是隻有第一行,即沒有動態創建的行是唯一實際工作並且能夠自行移除的行。

因此,由於缺少最初的行,頁面甚至停止創建新行(但這是另一個問題xD)。

這是我用它來刪除該行的代碼:

$('.remove').on("click",function(event){ 
    event.preventDefault; 
    $(this).parent().parent().remove(); 

    //alert(str); 
    newRowNum -= 1; 
}); 

,這裏是直播的網站,如果你想需要赤出來: http://www.micontrol.cl/~mvargas/wordpress/wp-transatacama/reservas-rapidas/tabladinamica.php

+0

馬科斯,請編輯你的問題還包括足夠的HTML,讓我們看看有什麼卸下襬臂元素及其父母的父母的樣子。 – dgvid 2012-01-13 17:07:13

+1

請注意,'event.preventDefault'由於缺少括號而不會執行任何操作(應該是'event.preventDefault()')。 – JJJ 2012-01-13 17:12:00

+0

您的代碼只適用於帶有「刪除」類的元素,最初只顯示一個頁面。爲了將它應用到新的元素上,你必須把這個選擇器放在後代部分:'$(selector).on('click','.remove',function(){...});'。請參閱下面的答案。 – 2012-01-13 18:08:09

回答

1

.on()事件僅勢必元素最初在DOM中使用其默認語法。 See the documentation for it。如果要將事件委託給其他元素,則需要有第二個選擇器。

+0

我沒有得到它,但在「long」(不是那麼長的xD)文檔的最後,答案是最後一個例子,創建了新的元素,而且你說的元素也有能力創建新的元素: D. – 2012-01-13 18:17:26

1
<table id="test"> 
     <tr> 
      <td>A</td> 
      <td><a>Click</a></td> 
     </tr> 
     <tr> 
      <td>B</td> 
      <td><a>Click</a></td> 
     </tr> 
    </table> 

    <p> 
     <a id="insert">Copy</a> 
    </p> 

    <script type="text/javascript"> 
     $(document).ready(function(){ 

     $("#test").find("a").click(function(){ 

      $(this).parents("tr").remove(); 

     }); 

     $("#insert").click(function(){ 

      $("#test tr").first().clone(true).appendTo("#test"); 

     }); 

     }); 

    </script> 

這裏是一個搗鼓你:

http://jsfiddle.net/AdS8D/3/

編輯:添加克隆功能小提琴。

+0

thx,但它沒有解決,它只是做同樣的事情,動態創建的行根本不受影響。 :() – 2012-01-13 17:55:30

+0

@MarcosVargasMoran:我忘了修復我的小提琴鏈接。現在試試。 – Josh 2012-01-13 18:08:53

0

回到使用克隆技術,但使用.clone(true),以便它也複製事件處理程序。

+0

所以它會克隆,而不是如果html()?? var addRow = $(「#tabdata tbody」)。first()。clone() ; 然後附加追加(addRow)???? – 2012-01-13 17:57:59

+0

是的,但不要忘記添加true。這意味着它複製樣式,數據和最重要的(在這種情況下)事件處理程序。現有的代碼你沒有將事件處理程序附加到刪除按鈕。使用.clone(true)你不需要:) – Archer 2012-01-13 18:00:01

+0

老兄,我嘗試了很多使用克隆,它沒有工作,我選擇的答案工作使用clone()創建,或使用簡單的html()。 反正thaks爲你回答我離開使用HTML(),現在; D。 – 2012-01-13 18:18:39

0

你可以試試這個代碼:

$("#tabdata").on("click", ".remove", function(event){ 
    event.preventDefault; 
    $(this).parent().parent().remove(); 
    newRowNum -= 1; 
});