2011-11-25 56 views
4

閱讀若干準則jQuery的性能,我發現這個功能:jQuery的一個調用幾個動作

而不是做:

$('#legendGallery).draggable({containment:'#container'}); 
$('#caption').draggable({containment:'#container'}); 
$('#controls').draggable({containment:'#container'}); 

這樣做:

$('#legendGallery, #caption, #controls').draggable({containment:'#container'}); 

(一個調用了jQuery引擎應用了幾個動作)

我想將這個概念應用到arr複選框AY:

<input type="checkbox" class="largecheckbox" name="chk_wms[]" value="m1" /> 
<input type="checkbox" class="largecheckbox" name="chk_wms[]" value="m2" /> 
<input type="checkbox" class="largecheckbox" name="chk_wms[]" value="m3" /> 
<input type="checkbox" class="largecheckbox" name="chk_wms[]" value="m4" /> 

用下面的代碼我想禁用多個複選框:

$('input:checkbox[name="chl_wms\[\]"][value="m1"]', 'input:checkbox[name="chl_wms\[\]"][value="m2"]', 'input:checkbox[name="chl_wms\[\]"][value="m3"]).prop('disabled', true); 

但它不工作,沒有錯誤和應用沒有動作。

有沒有更好的方法來定義選擇器? 有沒有辦法使用一個單一的電話來執行該命令?

謝謝!

+0

'$('輸入:複選框[NAME = 「CH ** **大號_ WMS \ [\]」] ... 'Typo? –

回答

3

有似乎是在你的selctors一個錯字。另外,jQuery轉義字符是\\,每個選擇器應該在一個字符串中。考慮到這一點,它應該是:

$('input:checkbox[name="chk_wms\\[\\]"][value="m1"], input:checkbox[name="chk_wms\\[\\]"][value="m2"], input:checkbox[name="chk_wms\\[\\]"][value="m3"]').prop('disabled', true); 

通過修復它應該工作。

另一種比屬性選擇器更好的方法是使用類。例如:

<input type="checkbox" class="largecheckbox flag-disabled" name="chk_wms[]" value="m1" /> 
<input type="checkbox" class="largecheckbox flag-disabled" name="chk_wms[]" value="m2" /> 
<input type="checkbox" class="largecheckbox flag-disabled" name="chk_wms[]" value="m3" /> 
<input type="checkbox" class="largecheckbox" name="chk_wms[]" value="m4" />  
---- 
$(".flag-disabled").prop("disabled", "disabled"); 

甚至更​​好,但使用的ID:

<input type="checkbox" class="largecheckbox" id="chk_wms[m1]" name="chk_wms[]" value="m1" /> 
<input type="checkbox" class="largecheckbox" id="chk_wms[m2]" name="chk_wms[]" value="m2" /> 
<input type="checkbox" class="largecheckbox" id="chk_wms[m3]" name="chk_wms[]" value="m3" /> 
<input type="checkbox" class="largecheckbox" id="chk_wms[m4]" name="chk_wms[]" value="m4" />  
---- 
$("#chk_wms\\[m1\\], #chk_wms\\[m2\\], #chk_wms\\[m3\\]").attr("disabled", "disabled"); 
+0

$('input:checkbox [name =「chk_wms \\ [\\]」] [value =「m1」],input:checkbox [name =「chk_wms \\ [\\]」] [value =「m2」 ],input:checkbox [name =「chk_wms \\ [\\]」] [value =「m3」])。prop('disabled',true); 使用此我有一個JS錯誤。同樣只使用一個\ 我會盡快嘗試第二種解決方案。該列表由50個元素組成,需要時間。 – Daviddd

+1

第一種方法工作正常 - 只是在選擇器的末尾有一個缺少的類型 - 我還會編輯@rory_mccrossan答案以反映它 - 我相信你應該接受它 – alonisser

+0

@alonisser感謝您發現錯字 - 我修好了。 –

0

也許我失去了一些東西,但爲什麼你不只是做:

$('.largecheckbox').attr('disabled', 'disabled'); 
+0

這將禁用所有的複選框,OP將離開最後一個複選框'm4',處於活動狀態 –

+0

如果你對RegEx有好處,那就很好,否則禁用所有複選框並啓用你想要的。 – Srisa

+0

我需要根據值禁用多個複選框 我有一個基於.largecheckbox類的常規單擊事件,該列表由50個複選框組成,具體取決於在已選中的地圖上重新加載地圖,但根據地圖回調結果,必須禁用多個複選框。 – Daviddd