2013-10-09 153 views
1

Here is a JSFiddle我的問題。通過JQuery檢查/取消選中複選框的問題

注意我爲此使用了JQuery 2.0.2。

我正在使用JQuery複選框樹插件,當我手動單擊Subgroup B2中的每個元素時,Subgroup B2也將被檢查。相反,如果我手動取消選中其中一個孩子,Subgroup B2將進入「部分選擇」狀態,取消選中所有孩子將完全取消選中Subgroup B2。這工作很好,並按預期。

但是,請注意頂部的按鈕。

我試圖通過代碼觸發這些點擊事件。

第一個按鈕觸發標籤上的點擊事件(當您手動點擊框/文本時,點擊該事件)。正如你會注意到的,它會檢查所有的框,但Subgroup B2仍然只是部分選擇。

再次單擊該按鈕應該再次關閉複選框,但不是。這就是按鈕2的用途。出於某種原因取消選中按鈕,您需要點擊與查看複選框所需的元素不同的元素。這對我來說沒有意義。最後,如果您混合使用互動(實際點擊和編碼點擊),事情會更加分崩離析。

我一直在爲此工作數小時,而且每次都有與交互有關的問題,它來自複選框。

如何獲取複選框以尊重我的編碼點擊次數與我的手動點擊次數一樣多?

+0

看來,複選框和標籤點擊之間的關係是不工作,你可能期望。你確定你知道你點擊的地方嗎? – stevemarvell

回答

2

相信隨着按鈕的問題來自於觸發事件冒泡的DOM,你可以使用triggerHandler()代替trigger()避免這種情況,只需要注意,所以你需要使用它的這種方法隻影響第一個匹配元素一個循環:

$("#trigChildren").on('click', function() { 
    $('#one, #two, #three').each(function() { 
     $(this).parent().triggerHandler('click'); 
    }); 
}); 

Updated fiddle

+0

我對此有懷疑 - 我沒有意識到'trigger()'正在冒泡。我還發現了一個替代解決方案,它涉及在'labelClick'方法中註釋掉兩行 - 似乎工作原理是一樣的。感謝這個答案,但效果很好! – Johannes

相關問題