2011-07-20 73 views
4

在Jqgrid中,我想限制用戶隨時只選中一個複選框。當用戶選擇多個複選框時,只有最後選擇處於「選定」狀態,其餘應該自動取消選擇。jqgrid單選複選框

我已經將多選屬性設置爲true。但我無法做出取消選擇以前選擇的項目。如果有的話,可以這樣做嗎?

感謝

回答

9

您可以使用事件beforeSelectRow和復位選擇:

beforeSelectRow: function(rowid, e) 
{ 
    jQuery("#list47").jqGrid('resetSelection'); 
    return(true); 
} 

我要給你一個fiddle,所以你可以檢查它是如何工作的。

+2

你需要添加:var myGrid = $(「#list47」); $( 「#CB _」 + myGrid [0] .ID).hide();隱藏多選按鈕,如下所述:http://stackoverflow.com/questions/6212571/jqgrid-multiselect-check-all-in-header-how-to-hide-it/6213082#6213082 – Matthieu

+1

此外它不會如果分組處於活動狀態(至少以此形式),則工作。 – Matthieu

2

具有設置在每列一個複選框意味着您可以點擊超過一次一個。你所要求的基本上是multiselect: false的行爲,但與複選框列 - 你確定你真的想在這種情況下的複選框?

+1

+1,好也使onSelectRow事件彈出知道,如果你在一排點擊多選不活躍,所以你仍然可以處理的選擇。 – Matthieu

0

我知道這個問題很舊,但我在這個Stack Post找到了更好的解決方案。

所有你需要做的是設置jqGrid的以下兩個屬性:

multiselect:true // multi-select checkboxes appear 

multiboxonly:true // checkboxes act like radio buttons where only one is selected at a time 

我已經更新由LeftyX作出的小提琴簡單地使用multiboxonly設置在這個JsFiddle

這是什麼我需要。它可能會幫助別人。

+0

現在似乎不起作用,即使在你的小提琴中。 – JunM

3

你必須做一些更多的東西:

設置multiboxonlytruemultiselecttrue

2.定義事件onSelectRowbeforeSelectRow

3.定義全球訴ariable:var lastSel;


OnSelectRowbeforeSelectRow實現:

onSelectRow: function (rowId, status, e) { 
     if (rowId == lastSel) { 
      $(this).jqGrid("resetSelection"); 
      lastSel = undefined; 
      status = false; 
     } else { 
      lastSel = rowId; 
     } 
    }, 
beforeSelectRow: function (rowId, e) { 
      $(this).jqGrid("resetSelection"); 
      return true; 
     } 
+2

感謝爲我工作..! – BlackHack123