У меня есть набор динамически сгенерированных флажков, где каждый из них имеет атрибут data-id
, соответствующий идентификатору целого числа базы данных. Когда я заполняю свою html-форму объектом для редактирования, есть список целых чисел, представляющих, какие флажки должны быть проверены. Флажки помещены в div
с классом checkbox-wrapper
.
Итак, html выглядит так:
<div class="checkbox-wrapper">
<input type="checkbox" id="checkbox1" data-id="1">
<label for="checkbox1">Checkbox 1</label>
</div>
<div class="checkbox-wrapper">
<input type="checkbox" id="checkbox2" data-id="2">
<label for="checkbox2">Checkbox 2</label>
</div>
<div class="checkbox-wrapper">
<input type="checkbox" id="checkbox3" data-id="99">
<label for="checkbox3">Checkbox 99</label>
</div>
Обратите внимание, что идентификатор запускается с номерами индексов автоматического инкремента, тогда как идентификатор данных может иметь другое значение id. Я хочу выбрать их по идентификатору данных.
Теперь, используя JQuery, я знаю, что я могу выбрать соответствующие флажки, например:
$(".checkbox-wrapper>input[data-id='99']");
$(".checkbox-wrapper>input[data-id='1']");
Это работает на моей консоли, в chrome, и возвращает соответствующий DOM-элемент. Аналогично, это ниже, устанавливает флажки для проверки:
$(".checkbox-wrapper>input[data-id='99']").prop("checked", "checked");
$(".checkbox-wrapper>input[data-id='1']").prop("checked", "checked");
Однако, если я перебираю список целых чисел в своем javascript-коде (не непосредственно в консоли) и регистрирую возвращаемые элементы на основе значений id, я получаю некоторые странные результаты:
var ids = [1,2]
$.each(ids, function(index, myID){
console.log($(".checkbox-wrapper>input[data-id='"+myID+"']"));
$(".checkbox-wrapper>input[data-id='"+myID+"']").prop("checked", "checked");
});
Прежде всего, флажки не отмечены. Во-вторых, моя консоль печатает странные результаты:
n.fn.init[0]
context: document
length: 0
prevObject: n.fn.init[1]
selector: ".checkbox-wrapper>input[data-id='1']"
__proto__: n[0]
n.fn.init[0]
context: document
length: 0
prevObject: n.fn.init[1]
selector: ".checkbox-wrapper>input[data-id='2']"
__proto__: n[0]
Печатные селекторные строки кажутся идеальными. Точные же селекторы возвращают DOM-элементы, когда они записываются непосредственно в хром-консоль. Затем они возвращают объекты следующим образом:
[<input type="checkbox" id="checkbox1" data-id="1">]
Что такое n.fn.init [0] и почему он возвращается? Почему мои две, казалось бы, идентичные функции JQuery возвращают разные вещи?