Делегирование событий в jquery динамическим элементам


Привет у меня есть следующая проблема. Я много искал здесь и в google, и я не могу найти проблему.

у меня есть таблица, которая динамически обновляется: PHP + Mysql + Jquery

таблица, которая изначально загружается, выглядит следующим образом:

<table class="table table-striped table-bordered table-hover">
<tbody>
    <tr>
        <td><i class="fa fa-envelope fa-1x" title="Cerrada"></i> RA 02-16 </td>
        <td>15-087B-16-1</td>
        <td>950,00</td>
        <td style="text-align: right">118385,50</td>
        <td style="text-align: right">118385,57</td>
        <td style="text-align: center"><a href="#viewC" data-value="4" data-toggle="modal" class="link-view-c"><i class="fa fa-eye link-view-c-child" data-value="4" aria-hidden="true"></i></a></td>
    </tr>
    <tr>
        <td><i class="fa fa-envelope fa-1x" title="Cerrada"></i> RA 17-17</td>
        <td>15-087B-17-2</td>
        <td>142,00</td>
        <td style="text-align: right">11112,12</td>
        <td style="text-align: right">11112,12</td>
        <td style="text-align: center"><a href="#viewC" data-value="14" data-toggle="modal" class="link-view-c"><i class="fa fa-eye link-view-c-child" data-value="14" aria-hidden="true"></i></a></td>
    </tr>
</tbody>

у меня есть следующее, чтобы захватить идентификатор, который я определяю в поле data-value в link в последнем столбце.

<script>
$(document).ready(function () {
    $(".link-view-c").on('click', '.link-view-c-child', function () {
        v = $(this).data('value');
        alert(v);
    });        
});

Проблема в том, что при инициализации таблицы он загружает первый блок, я получаю идентификатор, но когда я перехожу к следующему блоку, он ничего не делает. И я использую

on('evento', 'destino', function())

предполагается, что class link-view-c-child из второго блока запускает событие.

любая помощь, которая избавит меня от этого, пожалуйста.

Sldos

Author: a.xcibo, 2018-05-03

2 answers

Для выполнения событий с jquery над динамически созданными элементами используйте следующее;

$(document).on( 'evento click,change,blur,etc', '#idelemento .clase', function(){
        //Todo el código aqui
    } );

С этим вы будете ссылаться на DOM поэтому он будет искать любой элемент с классом или идентификатором при выполнении события, которое вы хотите.

 2
Author: Albert Hidalgo, 2018-05-03 15:26:35

1) Как говорит Я Альберт, в этом случае лучше попросить DOM найти элементы, чем установить его в определенном селекторе.

2) Если вы не перемещаете много кода, попробуйте поместить события и классы поверх TD, а не внутри.

3) Если внутри TD есть элементы, которые вам нужны как <a>, Вы можете использовать $(this).find('a').text() например

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

$(function(){
  
   $(document).on('click', '.link-view-c', function () {
        v = $(this).data('value');
        alert(v);
    }); 
})
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<table class="table table-striped table-bordered table-hover">
<tbody>
<thead>
  <tr>
    <th>Head</th>
    <th>Head</th>
    <th>Head</th>
    <th>Head</th>
    <th>Head</th>
    <th>Head</th>

  </tr>
</thead>
    <tr>
        <td><i class="fa fa-envelope fa-1x" title="Cerrada"></i> RA 02-16 </td>
        <td>15-087B-16-1</td>
        <td>950,00</td>
        <td style="text-align: right">118385,50</td>
        <td style="text-align: right">118385,57</td>
        <td class="link-view-c" aria-hidden="true" data-value="4" data-toggle="modal" style="text-align: center"><a href="#viewC" ><i class="fa fa-eye link-view-c-child" ></i></a></td>
    </tr>
    <tr>
        <td><i class="fa fa-envelope fa-1x" title="Cerrada"></i> RA 17-17</td>
        <td>15-087B-17-2</td>
        <td>142,00</td>
        <td style="text-align: right">11112,12</td>
        <td style="text-align: right">11112,12</td>
        <td style="text-align: center" data-value="14" class="link-view-c" aria-hidden="true" data-toggle="modal" ><a href="#viewC" ><i class="fa fa-eye link-view-c-child" data-value="14" ></i></a></td>
    </tr>
</tbody>
</table>
 2
Author: Alberto Siurob, 2018-05-03 15:15:40