2012-01-13 2 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

Marcos, пожалуйста, измените свой вопрос также включать достаточное количество HTML, чтобы позволить нам видеть то, что .remove элемент и родители своего родителя выглядеть. – dgvid

+1

Обратите внимание, что 'event.preventDefault' ничего не делает, поскольку скобки отсутствуют (должно быть' event.preventDefault() '). – JJJ

+0

Ваш код будет работать только для элемента с классом 'remove', изначально представленного на странице. Чтобы применить его также к новым элементам, вам придется поместить этот селектор в поточную часть: '$ (selector) .on ('click', '.remove', function() {...});'. См. Мой ответ ниже. –

ответ

1

.on() события только связаны с элементами которые первоначально находятся в DOM с синтаксисом по умолчанию. See the documentation for it. Вам нужно иметь второй селектор, если вы хотите делегировать событие другим элементам.

+0

Я не получил его, но в конце «длинной» (не такой длинной xD) документации лежит ответ, последний пример, создает новые элементы и те элементы, которые, как вы сказали, имеют возможность создавать новые тоже: D. –

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/

EDIT: Добавлена ​​функциональность клона скрипки.

+0

thx, но он не сработал, он просто делает то же самое, динамически созданные строки вообще не затрагиваются. :( –

+0

@MarcosVargasMoran: Я забыл исправить мою ссылку на скрипку. Попробуйте сейчас. – Josh

0

Вернитесь к использованию техники клонирования, но используйте .clone (true), чтобы он копировал обработчики событий.

+0

, так что вместо этого он будет клонировать, если html() ?? var addRow = $ ("# tabdata tbody"). First(). Clone() Затем добавьте append (addRow) ???? –

+0

Да, но не забудьте добавить true. Это означает, что он копирует стили, данные и, самое главное, (в данном случае) обработчики событий. Когда вы копируете строку с вашим существующий код, который вы не прикрепляете обработчик события к кнопке delete. С .clone (true) вам не нужно: – Archer

+0

чувак, я много пробовал использовать клон, это не сработало, ответ, который я выбрал, работал , используя clone() для создания или простой html(). anyways thaks для вас ответ Я ухожу с помощью html(), на данный момент; D. –

0

Вы можете попробовать этот код:

$("#tabdata").on("click", ".remove", function(event){ 
    event.preventDefault; 
    $(this).parent().parent().remove(); 
    newRowNum -= 1; 
}); 
Смежные вопросы