2012-02-01 1 views
0

Это сводит меня с ума. Я просто не понимаю.JavaScript/jQuery - после выполнения onclick-callback состояние «проверено» сбрасывается

Я написал функцию фильтра на основе флажков и нажав на их метки. Я проверяю состояние «проверенных» флажков и показываю элементы со списком элементов (остальные элементы скрыты). Я использую плагин 3rdparty, который стилизует флажки (вырезанные из примера) и проверяет флажки, в то время как другое событие onClick выполняет фильтрацию.

Проблема в том, что после того, как состояние «проверено» успешно установлено внутри функции обратного вызова, оно «внезапно» сбрасывается! Я не понимаю, почему это происходит.

Я реализовал базовую логику (без стилизации) здесь: http://jsfiddle.net/3Xtuh/13/ и спросить все, чтобы помочь мне решить эту проблему, пожалуйста.

+0

Почему вы привязываете обработчик к метке вместо этого флажка? Когда вы нажимаете метку, она вызывает событие щелчка на флажке в любом случае. –

+0

Я считаю, что вы идете об этом совершенно неправильно. Что вы пытаетесь достичь? –

+0

В моей полной реализации флажки сами скрыты. Вместо них отображаются стилизованные изображения. Единственный способ доступа к флажку - щелкнуть по его метке. (я использую этот плагин: http://www.no-margin-for-errors.com/projects/prettycheckboxes/) – admit

ответ

1

Проблема заключается в том, что вы вызываете событие клика вручную, а затем, когда ваша функция запущена, вызывается событие click по умолчанию.

Передача переменной события обработчику кликов и вызову event.preventDefault(); исправляет это поведение.

Смотрите пример здесь: http://jsfiddle.net/3Xtuh/14/

+0

По сути, вы вручную настраиваете состояние щелчка, а затем после выполнения вашей функции - по умолчанию HTML действие запускается и «блокирует» ваши флажки. Надеюсь это поможет. –

+0

Теперь это не означает, что он доставит вас туда, где вы хотите быть, но по крайней мере это может помочь вам в правильном направлении. Вам понадобятся некоторые условия для проверки состояния после нажатия. –

+0

Да, вы совершенно правы в сбросе! Но не могли бы вы дать мне еще один намек о запуске поведения onclick в случае хэша, который содержит некоторые элементы для проверки (# ch1 & ch2)? – admit

0

HTML-label проверит соответствующий флажок, даже если подмигнули скрытый (с использованием CSS), поэтому there's не нужно изобретать велосипед.

Вы должны использовать событие change(). Попробуйте это demo и просмотрите консоль.

+0

Правильно, это не отвечает на его проблему. –

0

Поведение браузера по умолчанию, использующее ваш js-скрипт. По умолчанию щелчок на метке, которая либо обернута вокруг флажка, либо имеет действительный набор атрибутов for, переключает состояние checked состояния этого флажка.

Вы добавили пользовательский обработчик onclick на этикетках.

Итак, что происходит, когда вы нажимаете на ярлык? Ваш обработчик кликов уволен (в поле «Изменить состояние цели»), а затем

Смежные вопросы