Первый щелчок не вызывает событие

0

Я хочу вызвать событие click на входе после нажатия на определенный div ('.checker'). Другими словами, нажатие на ".checker" имитирует событие click on on checkbox, проверяя его удаленно.

Код, который я написал, работает, но вызывает триггеры только после второго щелчка, при первом сбой. Это происходит не только с ".checker", но также и с флажком.

Весь этот HTML-код упакован в меню сглаживания jquery. После нажатия на "h3" ".sub-tree-wrap" происходит сбой. "E.stopPropagation" - это предотвращение пузырьков, которые вызывают крах меню.

Форма jquery работает так: щелчок на вкладке (флажок) пузырьков, и это переключает класс на span и div ('. Checker') в '.control_multi' - http://uniformjs.com/

На jsfiddle он работает, но без jquery unform - http://jsfiddle.net/mciastek/PQP9S/3/ (спасибо Mark S)

Что важно, я могу манипулировать HTML только Javascript/jQuery.

HTML

<h3><div class='checker'></div></h3>
  <div class='sub-tree-wrap'>
    <div></div>
      <div class='control_multi'>
        <div>
          <span>
            <div class='checker'>
              <span>
                <input type='checkbox'>
              </span>
            </div>
         </span>
        </div>
      </div>
    </div>
  </div>

Javascript/jQuery

   $('h3 > .checker').click(function(e){
            // prevent list collapse after click
            e.stopPropagation();
            $this = $(this);
            // if has control_open or checkbox is disabled don't run multiple checking
            var subTree = $this.parent().next();
            if( (!subTree.hasClass('has-open')) && !($this.hasClass('disabled')) ) {
                var inputCheck = $this.parent().next().find('.control_multi').find('input:checkbox')
                inputCheck.trigger('click');
            }
            // toggle class .checked after click
            $this.children('span').toggleClass('checked');
        });
  • 2
    Не могли бы вы воспроизвести его на jsfiddle.net?
  • 3
    У вас есть имя класса, начинающееся с точки .checker поэтому ваш селектор jquery не будет работать. Также не помещайте блочные элементы (div) во встроенные элементы (span).
Показать ещё 4 комментария
Теги:
click
events

1 ответ

0

Поскольку '.checkbox' является элементом <input>, используйте триггер "focus".

$('h3 > .checker').click(function(e){
        // prevent list collapse after click
        e.stopPropagation();
        $this = $(this);
        // if has control_open or checkbox is disabled don't run multiple checking
        var subTree = $this.parent().next();
        if( (!subTree.hasClass('has-open')) && !($this.hasClass('disabled')) ) {
            var inputCheck = subTree.find('.control_multi .checkbox')
            inputCheck.trigger('focus');
        }
        // toggle class .checked after click
        $this.children('span').toggleClass('checked');
});

Смотрите этот jsfiddle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню