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/ надеюсь, что это решит вашу проблему. На самом деле вы должны triggerchange событие для флажков вручную в checkAllFlavors()

Другие вопросы по тегам