JQuery жить и поддерживать и менять
Мне нужно вызвать событие, когда "проверено" состояние любого из нескольких флажков, и сделать это не при прослушивании щелчка. Зачем?
Это выглядит так:
BUILD YOUR SUNDAE!
All Flavors [] Chocolate [ ] Vanilla [ ] Strawberry [ ] Pistacchio [ ]
При щелчке по всем вариантам устанавливаются флажки для всех остальных флажков:
function checkAllFlavors() {
$("#flavorFilterContainer input.flavor-filter").each(function (i, elem) {
$(elem).prop('checked', true);
});
}
Вышеприведенная функция работает заметно - все флажки отмечены. Тем не менее, если я слушаю изменения состояния, как это:
("#flavorFilterContainer input.flavor-filter").live('change', function () {
DispenseFlavor()
});
метод DispenseFlavor() вызывается только в том случае, если я физически нажимаю на флажок, а не в том случае, если состояние флажка флажка изменяется, устанавливая для свойства selected значение true, как это происходит в функции checkAllFlavors().
Изменяется ли измененное состояние флажка только при взаимодействии с графическим интерфейсом, а не через настройку свойства с $(elem).prop('checked', true)
?
3 ответа
Вам придется вручную стрелять change
событие из вашего checkAllFlavors
функция:
function checkAllFlavors () {
$('#flavorFilterContainer input.flavor-filter').prop('checked', true).change();
}
Кстати, вы должны кэшировать этот селектор.
Я нашел этот ответ на форумах jQuery:
$.propHooks.checked = {
set: function(elem, value, name) {
var ret = (elem[ name ] = value);
$(elem).trigger("change");
return ret;
}
};
Это решение представляет собой пользовательский обработчик для изменений в "флажок" с помощью метода "проп". Этот обработчик инициирует событие изменения по желанию, но без необходимости указывать его вручную.
Проверьте пример на http://jsfiddle.net/nGQKw/7/ надеюсь, что это решит вашу проблему. На самом деле вы должны trigger
change
событие для флажков вручную в checkAllFlavors()