jQuery - индекс продолжает сбрасываться - PullRequest
0 голосов
/ 22 января 2020

У меня есть таблица с большим количеством данных, и по некоторым причинам индекс input после каждого <td> </td> продолжает сбрасываться. Для этого я создал эту функцию

$('.custom-input').each(function(index) {
   $(this).attr('data-index', index);
});

Но на "функции изменения", когда я пытаюсь ее использовать, она не работает.

Мой текущий код:

$('.custom-input').each(function(index) {
   $(this).attr('data-index', index);
});

$('.custom-input[data-index=" '+index+' "]').on('change', function() {
   alert($(this).index());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<tr>
  <td>
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
  </td>
  <td>
     <!-- The index for the next input should not be reset -->
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
  </td>
</tr>

Ответы [ 2 ]

1 голос
/ 23 января 2020

Событие изменения не работает, потому что вы пытаетесь присоединить его к каждому указанному c элементу с помощью индексной переменной, которая не существует. Я не знаю цели того, что вы делаете, но вы должны прикрепить событие ко всем .custom-input элементам. Кроме того, я бы предложил использовать событие input вместо change.

Событие input срабатывает, когда значение элемента <input>, <select> или <textarea> Изменено.

Событие изменения запускается для элементов <input>, <select> и <textarea>, когда изменение значения элемента совершается пользователем. В отличие от входного события, событие изменения не обязательно вызывается при каждом изменении значения элемента.

$('.custom-input').each(function(index) {
   $(this).attr('data-index', index);
   console.log("data-index set to: " + $(this).attr('data-index'));
});

$('.custom-input').on('input', function() {
   alert($(this).index());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tr>
  <td>
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
  </td>
  <td>
     <!-- The index for the next input should not be reset -->
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
     <input class="custom-input" type="text" value="0">
  </td>
</tr>
0 голосов
/ 22 января 2020

Разве вы не должны удалять пробелы вокруг индекса в этом jquery селекторе? как это:

$('.custom-input[data-index="'+index+'"]').on('change', function() {
   alert($(this).index());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...