2013-11-28 107 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

相關問題