2017-02-09 38 views
1

我試圖檢查所有元素如果複選框輸入類型,我試過不同的解決方案,但它沒有工作,我知道這很簡單,但我不知道什麼是錯的我的代碼:如何檢查所有複選框使用jQuery

<ul class="items"> 
    <li class="item checkall"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkAll"> 
     <span></span> 
     <p>Check All Items</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="1"> 
     <span></span> 
     <p>Learn HTML5.1</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="2"> 
     <span></span> 
     <p>Learn PHP7</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="4"> 
     <span></span> 
     <p>Program a Website</p> 
    </label> 
    </li> 
</ul> 

的jQuery:

$(".checkall").click(function() { 
    $('input:checkbox').not(this).prop('checked', this.checked); 
}); 
+0

首先使用class而不是id。 id必須是唯一的,並使用'#id'選擇一個id和'.class'來選擇一個類。如果你看起來更好,還有很多像你這樣的其他問題http://stackoverflow.com/questions/18537609/jquery-checkbox-check-all; http://stackoverflow.com/questions/15504643/check-uncheck-all-checkboxes-with-another-single-checkbox-use-jquery – Alexis

+0

是的。這很簡單。所以,我的問題是:如果你想檢查所有複選框,爲什麼你需要'not(this)'語句? –

+0

使用'change'事件而不是'click' – Satpal

回答

4

id在一個HTML頁面的每個元素必須是唯一的。所以要麼保持unique id要麼提供class代替checkbox代替idclass可以相同。沒有與class保持唯一性。

附上click/change event.checkAllcheckbox已改爲類在這裏,而不是id並設置基於.checkAll複選框的選中屬性的所有.checkbox財產。以下是摘錄。

$(".checkAll").on('change',function(){ 
 
    $(".checkbox").prop('checked',$(this).is(":checked")); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="items"> 
 
    <li class="item checkall"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkAll"> 
 
     <span></span> 
 
     <p>Check All Items</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="1"> 
 
     <span></span> 
 
     <p>Learn HTML5.1</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="2"> 
 
     <span></span> 
 
     <p>Learn PHP7</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="4"> 
 
     <span></span> 
 
     <p>Program a Website</p> 
 
    </label> 
 
    </li> 
 
</ul>

0

更改您的JS這樣的:

$(".checkall").click(function (e) { 
    $('input[type="checkbox"]').not(this).prop('checked', this.checked); 
}); 

並添加類到您的輸入不li元素:

<input class="checkall" type="checkbox" name="item[]" id="checkAll"> 

這裏是fiddle

0
$(".checkall").click(function (e) { 

    var list = $(e.target).parents('ul'); 
    $('li:gt(0) label input:checkbox',list).attr('checked', this.checked); 

}); 
+2

儘管這段代碼可能會解決這個問題,包括* how *和* why的解釋,這就解決了這個問題[真的有幫助](// meta.stackexchange.com/q/114762)來提高你的帖子的質量。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

+0

@TobySpeight當然,下次我會照顧這些東西。 – hdkhardik