Я хочу вызвать событие 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');
});
Поскольку '.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
.checker
поэтому ваш селектор jquery не будет работать. Также не помещайте блочные элементы (div) во встроенные элементы (span).