2014-04-04 137 views
0

folliwing小提琴是好的,閱讀下面我需要改變它。如何勾選其他部分的所有複選框,方法是勾選當前部分中的複選框?

http://jsfiddle.net/V5SSM/14/

您點擊☑分段1.1,然後將所有其他獲得點擊:

  • ☑小節2.1
  • ☑小節2.2
  • ☑2.3小節
  • ☑分段2.4
  • ☑3.1小節
  • ☑分段3.2
  • ☑分段3.3
  • ☑3.4小節

下面是HTML樹:

第一節

Subsection 1.1 
Subsection 1.2 
Subsection 1.3 
Subsection 1.4 

第2節

Subsection 2.1 
Subsection 2.2 
Subsection 2.3 
Subsection 2.4 

第3

Subsection 3.1 
Subsection 3.2 
Subsection 3.3 
Subsection 3.4 

更多詳細信息:

你可以看到,目前的jsfiddle示例工作。它用於勾選當前部分的所有複選框,同時勾選當前部分中的一個複選框。我希望它的工作原理相同,但不要勾選它自己的部分的複選框,而是勾選其他部分的所有其他複選框。

舉例:我選擇「1.1」節中的所有其他節不是第1節。 「節1.1」應該選擇所有其他節:2.1節,2.2節,2.3節,2.4節,3.1節,3.2節,第3.3,3.4小節

+0

我不明白你想做什麼,你可以更具體嗎? – Stphane

+0

您點擊☑分段1.1,然後將所有其他獲得點擊: ☑小節2.1 ☑小節2.2 ☑2.3小節 ☑小節2.4 ☑小節3.1 ☑小節3.2 ☑小節3.3 ☑3.4小節 – Tudor

+0

奧基,我正在更新你的小提琴......如果我點擊第1,2小節怎麼辦? – Stphane

回答

1

您可以處理單擊使用事件委託機制通過對共同祖先連接處理程序的所有複選框:

var type = 'input[type="checkbox"]'; 
$('#selectAllButton').on('click', function() { 
    $(type).prop('checked', true).closest('label').addClass('c_on'); 
}); 
$('#selectNoneButton').on('click', function() { 
    $(type).prop('checked', false).closest('label').removeClass('c_on'); 
}); 

// event Delegation 
$('#docbuilder').click(function(e){ 
    var $t = $(this), 
     $tar = $(e.target); // The node that has been clicked  
    // If checkbox 
    if($tar.is(type)){ 
     var cbRemaining = $tar.closest('blockquote').find(type+':checked').length, /* counting how many checked checkboxes remain inside the current section */ 
      $otherCb = $t.children(':nth-child(n+3)').not($tar.closest('.document')[0]).find(type), /* Retrieve all checkboxes except the ones that belong to the current section */ 
      state = $tar.prop('checked'); // get the checked property of the checkbox beiing clicked 
     // If subsection checkbox 
     if($tar.closest('.subsection').length){ 
      if(!cbRemaining){ 
       $tar.closest('blockquote').prev().find(type).prop('checked', false); 
      } 
      if(!cbRemaining || cbRemaining==1 && state){ 
       $otherCb.prop('checked', state); 
      } 
      $tar.parent()[(state ? 'addClass':'removeClass')]('c_on'); // should we add or remove the color class on the checkbox label 
     // If section checkbox 
     } else if($tar.closest('.section').length){ 
      if(state) $otherCb.prop('checked', false); 
      $tar.parent().siblings().find(type).prop('checked', state) 
      .parent()[(state ? 'addClass':'removeClass')]('c_on'); 

     } 
    } 
}); 

您可能需要一點相應地修改這個代碼的一些限制尚未考慮在內。

+0

Concider upvoting,並選擇它作爲你的解決方案,如果這能解決你的問題';)' – Stphane

+0

我不能調高... http://jsfiddle.net/V5SSM/28/ – Tudor

+0

是的,我想,但你可以選擇我的答案作爲解決方案,因爲我解決了你的問題,並花時間在它上面'^^' – Stphane