У меня есть флажки в ярлыках. Мне нужно, чтобы метка имела класс, когда флажок установлен, но не тогда, когда этого не происходит. Я сделал это с этим:
$('label').click(function(){
if ($('input[type=checkbox]', this).is(':checked')) {
$(this).addClass('checked');
} else {
$(this).removeClass('checked');
}
});
Однако, когда страница загружается, если флажок установлен, метка не имеет класса, поскольку код еще не запущен.
Id нравится помещать код в функцию и называть его, однако следующее не работает. Оба моих примера кода завернуты в дом.
function checkFunc(){
if ($('input[type=checkbox]').is(':checked')) {
$(this).parent('label').addClass('checked');
} else {
$(this).parent('label').removeClass('checked');
}
}
checkFunc();
$('label').click(checkFunc);
Я получил синтаксическую ошибку или что-то принципиально неправильно с моим кодом?
ОБНОВЛЕНИЕ Ive попробовал следующее:
function checkFunc(){
if ($('input[type=checkbox]', this).is(':checked')) {
$(this).parent('label').addClass('checked');
} else {
$(this).parent('label', this).removeClass('checked');
}
}
$('label').each(checkFunc).click(checkFunc);
Когда вы вызываете функцию с помощью checkFunc()
тогда [this
относится к window
] 1, а не к элементу label
.
Похоже, вы хотите запустить функцию для каждого элемента метки, поэтому используйте .each
вместо этого:
$('label')
.each(checkFunc)
.click(checkFunc);
Но вы также можете просто поднять обработчик события клика после того, как вы связали его, вместо создания именованной функции:
$('label').click(function(){
// ...
}).triggerHandler('click');
$(this).parent('label')
неверно, потому что this
уже элемент label
.
checkFunc()
this
относится кwindow
, а не к элементуlabel
.this
в функцию в качестве параметра ^