觸發checkbox的click事件時遇到的問題

2022-03-23 07:40:23 字數 983 閱讀 5944

因一些原因要實現checkbox的單選,實現的方法是當選中乙個checkbox時,用jquery選擇除這個剛選中的checkbox外所有已經被選中的checkbox,然後觸發其click事件(因為每個checkbox狀態改變時要處理一些問題,所以不能直接將其checked狀態改為false),但卻莫名其妙地進入了無限迴圈.

當cbx已被選中再點選cbx2時,首先會先執行cbx2繫結的第乙個click函式,其輸出為true,說明當單擊時先反轉checkbox的狀態,然後再觸發其事件函式,所以在繫結的第二個click函式中,if條件判斷為真,所要執行:

$(':checkbox:checked').not(this).click();

這句**選中除剛單擊的這個checkbox外的已被選中的checkbox,在這個例子中只有cbx,觸發其click事件,如果按照前面所說的先反轉其狀態再觸發事件函式,則執行過程應該是:

執行cbx繫結的第乙個click函式,輸出false;

執行cbx繫結的第二個click函式數,if條件判斷為假,執行完畢.

但實際情況卻是無限迴圈,一直觸發這兩個checkbox的click函式.如果不是先反轉狀態再觸發事件函式的話,則第一次在cbx2的click函式中if條件判斷就為假,也不會導致迴圈.研究半天,終於搞清狀況:

如果用滑鼠點選或在其獲得焦點時按空格,會先反轉其狀態再觸發其click事件;

而如果通過jquery用**觸發其click事件,則會先觸發click事件再反轉狀態.

所以如果想實現開始所說的功能的話,只需麻煩一點,先手動改變checked狀態為false,然後再觸發click事件,而觸發click事件後狀態再次改變,由false變為true,所以要再次手動改變checked狀態:

$(':checkbox:checked').not(this).attr('checked',false).click().attr('checked',false);

獲取checkbox的值

使用jq,應使用prop方法來獲取和設定checked屬性,不應使用attr 通過prop方法獲取checked屬性,獲取的checked返回值為boolean,選中為true,否則為false input type checkbox name check id check checked chec...

關於TreeView中CheckBox的使用

專案設計中要使用treeview中checkbox 在treeview的屬性中的checkboxes設為ture 想達到乙個這樣的效果 1 選中乙個節點,則子節點的狀態為當前節點的狀態並設定展開或摺疊。如 本來預設全部是摺疊的,當選擇laboratory並使其checked為true時,其子節點的狀...

GridView裡的CheckBox,顯示被選中行

gridview繫結空資料來源 gridview1.datasource null gridview1.databind 選擇 center height 25px width 45px ckb runat server sid headertext 編號 姓名 headertext 姓名 部門 h...