3 回答

TA貢獻1824條經驗 獲得超6個贊
在我看來,您已經使用了幾乎正確的代碼。最大的問題是您需要刷新現有的過濾器工具欄。您可以使用destroyFilterToolbar我在答案中建議的方法。稍后我向trirand提出了建議(請參閱此處和pull request),現在它已包含在jqGrid的主要代碼中。您的代碼如下所示。
beforeProcessing: function (data) {
var $self = $(this),
newProductValues = data.pVals,
newEnvironmentValues = data.eVals,
newTypeValues = data.tVals,
cmProduct = $self.jqGrid("getColProp, "Product"),
cmEnvironment = $self.jqGrid("getColProp, "Environment"),
cmType = $self.jqGrid("getColProp", "Type"),
isChanged = false;
if (cmProduct.editoptions.value !== newProductValues) {
$self.jqGrid("setColProp", "Product", {
searchoptions: { value: ":All;" + newProductValues },
editoptions: { value: newProductValues }
});
isChanged = true;
}
if (cmEnvironment.editoptions.value !== newEnvironmentValues) {
$self.jqGrid("setColProp", "Environment", {
searchoptions: { value: ":All;" + newEnvironmentValues },
editoptions: { value: newEnvironmentValues }
});
isChanged = true;
}
if (cmType.editoptions.value !== newTypeValues) {
$self.jqGrid("setColProp", "Environment", {
searchoptions: { value: ":All;" + newTypeValues },
editoptions: { value: newTypeValues }
});
isChanged = true;
}
if (isChanged) {
// recreate filter toolbar to refresh the data
$self.jqGrid("destroyFilterToolbar");
$self.jqGrid("filterToolbar", {
stringResult: true,
searchOnEnter: true,
searchOperators: true,
defaultSearch: "cn"
});
}
}
(我加入了searchOperators: true可能引人入勝的新選項)
您可以將解決方案與refreshSerchingToolbar我在答案中描述的函數調用結合使用,以將舊過濾器加載到過濾器工具欄中。
順便說一句,您可以考慮更改value使用的屬性的格式。除了使用字符串形式,"Product1:Product1;Product2:Product2;etc:etc"還可以使用對象形式{Product1: "Product1", Product2:"Product2", etc: "etc"}。

TA貢獻1793條經驗 獲得超6個贊
不客氣!我沒有測試代碼-我只是在編寫答案時編寫了代碼。因此它可能包含一些小錯誤。通常,cmXX["editoptions"]
它與cmXX.editoptions
JavaScript中的相同,并且最好使用最后一種形式。無論如何,我都希望您可以配置您的代碼,使其現在可以工作。這是主要目標。
添加回答
舉報