2012-01-13 95 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; 
});