jQuery связывается с элементами, которые существуют в DOM.Вы привязываетесь к #testDoneInclude
до того, как оно будет сгенерировано.Самый простой обходной путь - делегировать привязку элементу-предку, который, как вы знаете, будет на странице во время выполнения привязки события.Так, например,
$('.dataTables_filter').on('change', "#testDoneInclude", function(){
// Will be called when "#testDoneInclude" changes
};
Однако обратите внимание на важное наблюдение.
Способ работы id
свойств в HTML заключается в том, что страница ожидает ровно один элемент с уникальным именем идентификатора.
$('.dataTables_filter').each(function () {
$("div.samples-toolbars").html('<div><input type="checkbox" id="testDoneInclude" name="testDoneInclude" class="form-check-input" /><label for="testDoneInclude" class="form-check-label">Test done include</label></div>');
});
},
Цикл each
в приведенном выше фрагменте кода создает один флажок для каждой строки в '.dataTables_filter'
, и поэтому у вас есть несколько флажков с одинаковым уникальным идентификатором.Здесь атрибут может быть полезен.Я использую пользовательские атрибуты (например, что-то, начинающееся с data-
, мне нравится data-hook
), а затем связываюсь со всеми этими сгенерированными элементами.Поэтому, если вы создадите следующий элемент:
<input type="checkbox" id="testDoneInclude" name="testDoneInclude" class="form-check-input" /><label for="testDoneInclude" class="form-check-label"
data-hook="test-done-include"> // This is our custom attribute
Вы бы связали его, как и выше,
$('.dataTables_filter').on('change', "[data-hook="test-done-include"]", function(){
// Will be called when "#testDoneInclude" changes
};
(обратите внимание на квадратные скобки [data-hook = "test-done-включают в себя "]`).И ваш DOM будет действительным.
Конечно, у вас будут проблемы, если это внутри формы, поскольку для форм требуется атрибут name
или id
.И ваш label
не будет работать, если он не обернет input
.В подобных случаях вам может понадобиться атрибут data-
для привязки к событию, но вам придется использовать сгенерированный идентификатор, чтобы дружелюбно играть с form
s и label
s.