2009-10-07 63 views
4

以編程方式選擇設置爲多選的jqGrid中的所有行的最佳方式是什麼?以編程方式選擇jqGrid中的所有行?

代碼可以一次一個地循環遍歷所有行並選擇每一行,但是網格標題中的複選框不會被選中。我在想只是觸發標題行復選框的單擊事件,但這會對基礎jqGrid實現進行假設。必須有更好的辦法...

在此先感謝!

回答

6

如果您通過手動單擊每個選項來選擇多選jqGrid中的所有行,則標題中的複選框不會被檢查,所以當您以編程方式執行它時,我不一定會期望它發生您對每行使用setSelected(rowid,true),這相當於單擊每行,因爲「true」參數指示應爲每個行觸發單擊的事件)。

所以事實上,如果你想讓他們所有人都得到檢查,並希望檢查標題中的複選框,觸發點擊事件可能是你最好的選擇。如果您深入瞭解源代碼並查看單擊複選框時發生的情況,實際上它只是遍歷所有行並將每個行設置爲選中狀態,所以我認爲您不會做得更好。

+0

感謝您的時間,它看起來像我將只那麼就採用那種方法。 – 2009-10-07 17:03:11

2

奇怪的是,API中似乎沒有這樣的功能。以編程方式選擇「全選」複選框將觸發全選代碼(可在grid.base.js中找到,從1053行開始)。與手動選擇單個行不同,這將正確地觸發onSelectAll事件。因此,這做出了一些假設,但並不像其他方式那麼多。:/

+1

你可能會認爲這樣的功能會成爲API的一部分 - 我認爲這是未來版本的一些建議。 – 2009-10-07 17:04:15

1

是的,這是真的,這不是一個非常傳統的方法,基本上是你說的你認爲是做什麼,但我發現這是最簡單的方法讓選擇的所有行,也有頭複選框選擇:

var grid = $("#my_grid"); 
    grid.resetSelection(); 
    $('#cb_my_grid').click(); 
    var ids = grid.getDataIDs(); 
    for (var i=0, il=ids.length; i < il; i++) 
    grid.setSelection(ids[i], false); 

我猜想行不會選擇當標題複選框被編程點擊因爲jqGrid的基本IM的喜歡你說的話嗎?我不知道它在下面的工作方式,但現在看起來這對我來說很有用。

我想確保在我的網格中選中標題複選框的主要原因是,用戶可以下意識地確定是的,網格中的所有行都是當前選定的(包括在當前滾動條下方不可見的行查看),而不必點擊標題複選框,以確保。

@Craig - 我得試試你的方法,似乎更簡單,更合理

1

編程選擇「全選」複選框並非總是引發選中所有代碼。我們需要在之前設置「checked」屬性,因此將選擇select all方法的正確分支。這裏是我使用網格版本3.8.1的代碼:

$("#cb_my_grid").attr("checked", true); 
$("#cb_my_grid").trigger('click'); 
$("#cb_my_grid").attr("checked", true); 
+0

應該可能使用'.prop(「checked」,true)'而不是'.attr(「checked」,true)' – 2012-04-17 04:35:15

3

我認爲沒有什麼不可能,這是替代解決方案。您可以一次一個地循環所有行並選擇每一行,然後手動檢查網格標題中的複選框。但是當至少一個複選框未被選中時,網格標題中的複選框將被取消選中。

colNames : [ ,'<input type="checkbox" id="cbox" onclick="UI_PaxCheckin.checkBox(this,event)" />',..] 

UI_PaxCheckin.checkBox = function(obj,e) { 
e = e||event; 
e.stopPropagation? e.stopPropagation() : e.cancelBubble = true; 
var grid = $('#jqGridPax'); 
if(obj.checked == true){ 
    UI_PaxCheckin.multiSelectedFlightRowID = []; 
} 
for (var p = 0; p < grid[0].rows.length -1 ; p++) { 
    $('#chkIsSelected_' + p).prop('checked', obj.checked); 
    //manual checkbox click event function call 
} 
$('#cbox').prop('checked', obj.checked);} 
+1

儘管如此,你似乎在重新發明輸入類型的輪子。爲什麼不使用網格中內置的複選框? – 2015-05-28 13:54:54

+0

我已經嘗試了多選擇選項和手動多選。我在多選擇選項中遇到了一些困難。例如:觸發點擊事件標題複選框沒有被選中,很難優化多選選項到我的上下文(我想調用一些事件時複選框被選中等..) – 2015-05-29 03:24:39

0

遠東更好的解決方案,實際點擊選擇所有複選框

gridComplete: function(){ 
    $(this).jqGrid('resetSelection'); 
    $(this).closest(".ui-jqgrid").find(".ui-th-column:first .cbox").click(); 
} 

,或者如果你的網格ID爲「mygrid」

$("#mygrid").jqGrid('resetSelection'); 
$("#cb_mygrid").click();