2013-11-28 33 views
0

我想在点击某个div('.checker')后触发点击事件输入。换句话说,点击'.checker'模拟复选框上的点击事件,并远程检查它。第一次点击不会触发事件

我编写的代码有效,但只有第二次点击后才会触发,第一次失败。这种情况甚至不会发生在'.checker'上,也发生在复选框上。

以下所有HTML都包装在jquery折叠菜单中。点击'h3'后,'.sub-tree-wrap'折叠。 'e.stopPropagation'用于防止冒泡,从而导致菜单崩溃。

jQuery的制服的工作是:点击输入(复选框)泡沫,这对切换span和div类 '.control_multi ' - http://uniformjs.com/

上的jsfiddle它的工作原理,但没有的jQuery(' 检查'。) unform - http://jsfiddle.net/mciastek/PQP9S/3/(thx Mark S)

重要的是,我只能通过Javascript/jQuery来操作HTML。

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? – zerkms

+3

你有一个以'.checker'开头的类名,所以你的jQuery选择器不起作用。也不要将块元素(div)放入内联元素(span)中。 – untitled

+1

'$ this'被设置为全局变量,这是您的意图吗? – carmina

回答

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

相关问题