簡體   English   中英

復選框選擇/取消選擇觸發器第一次起作用,但在隨后的嘗試中失敗

[英]Checkbox select/deselect trigger works first time but fails on subsequent attempts

我有一部分基於html data- *標簽的jQuery,可以通過一組搜索表單中的復選框工作。

單擊“所有”復選框,其余所有元素都將變為未選中狀態(每次都正常運行,沒有問題)。

現在,如果選擇了“全部”,然后單擊其他選項,則“全部”應變為未選中狀態,這也將按預期工作。

但是,如果您願意,可以取消選中“所有”復選框,然后默認應選中其余復選框,以便取消選擇所需的結果。

如果您到目前為止尚未更改任何其他設置,則這將首次生效,但是如果選中了其他復選框,則選中“全部”,或者如果您單擊了“全部”按鈕,則選擇失敗,然后再次取消選擇。

關於它的最新想法將不勝感激(我嘗試使用控制台來發現它沒有在做什么,但是到目前為止,它沒有提供任何線索)。

下面的例子。

html...
<input data-sel-group='group1' id='group1_all'/>
<input data-sel-group='group1' id='group1_1'/>
<input data-sel-group='group1' id='group1_2'/>
/html...

jQuery...
$('input:checkbox').on('click',function(){
var sel = $(this).data('sel-group'),
    all = $('#'+sel+'_all'),
    chk = all.is(':checked');
    if($(this).attr('id')==all.attr('id')){
        if(chk){
            $('input[data-sel-group="'+sel+'"][id!="'+sel+'_all"]').attr('checked', false);
        }else{
            $('input[id!="'+sel+'_all"][data-sel-group="'+sel+'"]').attr('checked', true);
        }
    }else{
        all.attr('checked', false);
        if($('input[data-sel-group="'+sel+'"]:checked').length<=0){
            all.attr('checked', true);
        }
    }
})

使用.prop()而不是.attr()

$(selector).prop('checked', true/false);

還要通過.prop()與.attr()

您應在設置選中復選框屬性時使用延遲執行。 請參考這個博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM