如何使用jquery创建泛型方法
问题描述:
我已经实现了JQgrid与excel类似的过滤功能。这里我在搜索工具栏上有下拉列表。我需要帮助删除我在创建动态下拉列表时使用的重复代码。在下面所示 代码:如何使用jquery创建泛型方法
// Start ---- Dropdown filter Implementation //
beforeProcessing: function (data) {
var sourceLocaleMap = {}, sourceLocaleValues = ":All", rows = data.rows, i, sourceLocale, sourceLocaleName;
for (i = 0; i < rows.length; i++) {
sourceLocale = rows[i].SourceLocaleId;
sourceLocaleName = rows[i].SourceLocaleName;
if (!sourceLocaleMap.hasOwnProperty(sourceLocale)) {
sourceLocaleMap[sourceLocale] = 1;
sourceLocaleValues += ";" + sourceLocale + ":" + sourceLocaleName;
}
}
$(this).jqGrid("setColProp", 'SourceLocaleId', {
stype: "select",
searchoptions: {
value: sourceLocaleValues.substring(5),
sopt: ["eq", "ne"],
clearSearch: false,
attr: { multiple: 'multiple', size: 29 },
dataInit: dataInitMultiselect
}
})
var CompanyMap = {}, CompanyValues = ":All", rows = data.rows, i, Company, CompanyName;
for (i = 0; i < rows.length; i++) {
Company = rows[i].CompanyId;
CompanyName = rows[i].CompanyName;
if (!CompanyMap.hasOwnProperty(Company)) {
CompanyMap[Company] = 1;
CompanyValues += ";" + Company + ":" + CompanyName;
}
}
$(this).jqGrid("setColProp", 'CompanyId', {
stype: "select",
searchoptions: {
value: CompanyValues.substring(5),
sopt: ["eq", "ne"],
clearSearch: false,
attr: { multiple: 'multiple', size: 2 },
dataInit: dataInitMultiselect
}
})
var CurrencyMap = {}, CurrencyValues = ":All", rows = data.rows, i, Currency, CurrencyName;
for (i = 0; i < rows.length; i++) {
Currency = rows[i].CurrencyId;
CurrencyName = rows[i].CurrencyName;
if (!CurrencyMap.hasOwnProperty(Currency)) {
CurrencyMap[Currency] = 1;
CurrencyValues += ";" + Currency + ":" + CurrencyName;
}
}
$(this).jqGrid("setColProp", 'CurrencyId', {
stype: "select",
searchoptions: {
value: CurrencyValues.substring(5),
sopt: ["eq", "ne"],
clearSearch: false,
attr: { multiple: 'multiple', size: 17 },
dataInit: dataInitMultiselect
}
})
var LocaleMap = {}, LocaleValues = ":All", rows = data.rows, i, Locale, LocaleName;
for (i = 0; i < rows.length; i++) {
Locale = rows[i].LocaleId;
LocaleName = rows[i].LocaleName;
if (!LocaleMap.hasOwnProperty(Locale)) {
LocaleMap[Locale] = 1;
LocaleValues += ";" + Locale + ":" + LocaleName;
}
}
$(this).jqGrid("setColProp", 'LocaleId', {
stype: "select",
searchoptions: {
value: LocaleValues.substring(5),
sopt: ["eq", "ne"],
clearSearch: false,
attr: { multiple: 'multiple', size: 2 },
dataInit: dataInitMultiselect
}
}).jqGrid('destroyFilterToolbar')
.jqGrid('filterToolbar', {
stringResult: true,
searchOnEnter: false,
defaultSearch: "cn"
});
},
// End ---- Dropdown filter Implementation //
如在上面的代码提,我想要一个函数,而不是重复的代码。在这里,我有四个不同的ID与不同的参数。我想要一个功能,我只能通过参数&取决于这个参数值将被设置。请指导我如何实现这个&减少代码中的冗余数据。提前致谢。
答
我已经创建了下面的函数,而不是重复相同的数据&解决了我的问题。可能有助于任何人。请查找代码供您参考。
getUniqueNames = function (columnName, data) {
var textsMap = {}, Values = ":All", rows = data.rows, i, textKey, textValue;
var columnValue = columnName.substring(0, columnName.length - 2) + 'Name';
//Ascending order sorting
rows.sort(compare);
function compare(a, b) {
if (a[columnValue] < b[columnValue])
return -1;
if (a[columnValue] > b[columnValue])
return 1;
return 0;
}
for (i = 0; i < rows.length; i++) {
textKey = rows[i][columnName];
textValue = rows[i][columnValue];
if (!textsMap.hasOwnProperty(textKey)) {
textsMap[textKey] = 1;
Values += ";" + textKey + ":" + textValue;
}
}
return Values;
},
setSearchSelect = function (columnName, data) {
$('#list2').jqGrid('setColProp', columnName,
{
stype: 'select',
searchoptions: {
value: (getUniqueNames(columnName, data)),
sopt: ["eq", "ne"],
clearSearch: false,
sortorder: 'asc',
attr: { multiple: 'multiple' },
dataInit: dataInitMultiselect
}
})
});
};