Я делаю пользовательский элемент радио, который отображает изображения вместо обычного радио.странное поведение с обработчиком jquery click
Basic HTML, как:
<div id="wrap">
<p></p>
<input type="radio" data-check='class-check' data-uncheck='class-uncheck' style='display:none;'>
<p></p>
<input type="radio" data-check='class-check' data-uncheck='class-uncheck' style='display:none;'>
<p></p>
<input type="radio" data-check='class-check' data-uncheck='class-uncheck' style='display:none;'>
</div>
создавать собственные радиостанции:
$("#wrap").radio({someData});
Я успешно создать элементы мне нужно, и отображаются изображения, просто есть некоторые проблемы с событием щелчка (часть кода):
var elems = [];
for (var i = 0; i < someData.length; i++) {
elems.push({});
elems[i].input = $(this).find("input").eq(i); // get input
$("<div></div>").insertAfter(elems[i].input); // create a div to display image to
elems[i].wrap = elems[i].input.next();
elems[i].wrap.click(function(elem){
console.log(elem); // this console.log is triggered when the page load, not on click event
elem.addClass('img-checked').removeClass('img-uncheked'); // only the last element in elems have its class changed, not the elems[i] I give as parameter.
}(elems[i]));
}
Я не understund почему console.log
запускается при загрузке скрипта, а не в событии клика.
Также отображаются console.log
, но изменение класса применяется только к последнему элементу elems[i]
при нажатии кнопки.
Я также попытался без предоставления каких-либо параметров click
функции и использовать только elems[i]
непосредственно, но он действует одинаково, всегда применяющие изменения на последний вход elems
jsfiddle please – Sionnach733