以編程方式選擇設置爲多選的jqGrid中的所有行的最佳方式是什麼?以編程方式選擇jqGrid中的所有行?
代碼可以一次一個地循環遍歷所有行並選擇每一行,但是網格標題中的複選框不會被選中。我在想只是觸發標題行復選框的單擊事件,但這會對基礎jqGrid實現進行假設。必須有更好的辦法...
在此先感謝!
以編程方式選擇設置爲多選的jqGrid中的所有行的最佳方式是什麼?以編程方式選擇jqGrid中的所有行?
代碼可以一次一個地循環遍歷所有行並選擇每一行,但是網格標題中的複選框不會被選中。我在想只是觸發標題行復選框的單擊事件,但這會對基礎jqGrid實現進行假設。必須有更好的辦法...
在此先感謝!
如果您通過手動單擊每個選項來選擇多選jqGrid中的所有行,則標題中的複選框不會被檢查,所以當您以編程方式執行它時,我不一定會期望它發生您對每行使用setSelected(rowid,true),這相當於單擊每行,因爲「true」參數指示應爲每個行觸發單擊的事件)。
所以事實上,如果你想讓他們所有人都得到檢查,並希望檢查標題中的複選框,觸發點擊事件可能是你最好的選擇。如果您深入瞭解源代碼並查看單擊複選框時發生的情況,實際上它只是遍歷所有行並將每個行設置爲選中狀態,所以我認爲您不會做得更好。
奇怪的是,API中似乎沒有這樣的功能。以編程方式選擇「全選」複選框將觸發全選代碼(可在grid.base.js中找到,從1053行開始)。與手動選擇單個行不同,這將正確地觸發onSelectAll事件。因此,這做出了一些假設,但並不像其他方式那麼多。:/
你可能會認爲這樣的功能會成爲API的一部分 - 我認爲這是未來版本的一些建議。 – 2009-10-07 17:04:15
是的,這是真的,這不是一個非常傳統的方法,基本上是你說的你認爲是做什麼,但我發現這是最簡單的方法讓選擇的所有行,也有頭複選框選擇:
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 - 我得試試你的方法,似乎更簡單,更合理
編程選擇「全選」複選框並非總是引發選中所有代碼。我們需要在之前設置「checked」屬性,因此將選擇select all方法的正確分支。這裏是我使用網格版本3.8.1的代碼:
$("#cb_my_grid").attr("checked", true);
$("#cb_my_grid").trigger('click');
$("#cb_my_grid").attr("checked", true);
應該可能使用'.prop(「checked」,true)'而不是'.attr(「checked」,true)' – 2012-04-17 04:35:15
我認爲沒有什麼不可能,這是替代解決方案。您可以一次一個地循環所有行並選擇每一行,然後手動檢查網格標題中的複選框。但是當至少一個複選框未被選中時,網格標題中的複選框將被取消選中。
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);}
儘管如此,你似乎在重新發明輸入類型的輪子。爲什麼不使用網格中內置的複選框? – 2015-05-28 13:54:54
我已經嘗試了多選擇選項和手動多選。我在多選擇選項中遇到了一些困難。例如:觸發點擊事件標題複選框沒有被選中,很難優化多選選項到我的上下文(我想調用一些事件時複選框被選中等..) – 2015-05-29 03:24:39
遠東更好的解決方案,實際點擊選擇所有複選框
gridComplete: function(){
$(this).jqGrid('resetSelection');
$(this).closest(".ui-jqgrid").find(".ui-th-column:first .cbox").click();
}
,或者如果你的網格ID爲「mygrid」
$("#mygrid").jqGrid('resetSelection');
$("#cb_mygrid").click();
感謝您的時間,它看起來像我將只那麼就採用那種方法。 – 2009-10-07 17:03:11