Как остановить DataTable от сортировки по клику дочернего элемента, динамически добавляемого в заголовок? - PullRequest
0 голосов
/ 07 февраля 2020

На этот вопрос уже звучит ответ.

Я искал ответы, и я продолжаю возвращаться к event.stopPropagation() ответу. Но почему это не работает на этой скрипке? Я что-то упустил?

$(document).ready(function(){
  $('#test-table').DataTable()

  $('#test-table thead tr th').each(function(i, e) {
    $(this).append('<button id="test-button" style="margin-left: 5px; margin-right: 5px;">Test Button</button>')
  })

  $('body').on('click', '#test-button', function(e) {
    alert('test')
    e.stopPropagation()
  })

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet"/>

<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>


<table id="test-table" class="table table-striped table-bordered">
  <thead>
    <th>Name</th>
    <th>Description</th>
  </thead>
  <tbody>
    <tr>
      <td>a</td>
      <td>a</td>
    </tr>
    <tr>
      <td>b</td>
      <td>b</td>
    </tr>
  </tbody>
</table>

1 Ответ

1 голос
/ 07 февраля 2020

Посмотрите на JSFiddle: https://jsfiddle.net/0fyxws79/2/

Вам просто нужно изменить селекторы, прежде чем применять событие нажатия. a) Ранее выбранная кнопка была выбрана в отношении элемента body, а на теле больше не было событий, поэтому вы не смогли выяснить, работает ли stopPropagation.

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

01) Fiddle: здесь событие click прикреплено к телу HTML просто для того, чтобы вы знали, и ваш код из вопроса работает здесь но по-другому. https://jsfiddle.net/0fyxws79/1/

02) Скрипка: здесь событие сортировки уже присутствовало в заголовке таблицы, и это было то, что нам нужно предотвратить при нажатии кнопки. Это работает здесь https://jsfiddle.net/0fyxws79/2/

03) Скрипка: где вы можете увидеть разницу между элементами кнопок, которые присутствовали во время разработки, с элементами stopPropagation и кнопками, которые были добавлены динамически с остановкой распространения.
https://jsfiddle.net/uk4ym30r/

$(document).ready( function () {
  $('#example').DataTable();
  $('#example thead tr th').each(function(i, e) {
    $(this).append('<button id="test-button" style="margin-left: 5px; margin-right: 5px;">Test Button</button>');
  });

  $('th[class^="sorting"]').on('click', '#test-button', function(event) {
    alert('test');
    event.stopPropagation();
  });
});
...