我正在使用kendogrid做很多工作,并且有一个kendogrid,其中有一个下拉列表。有四行,我需要验证没有一行选择了与任何其他行相同的值。我是这样做的:
var pj = 0; var ga = 0; var gt = 0; var empty = 0;
var existingValues = _.filter($("#configSettingsGrid").data().kendoGrid.dataSource.data(), function (config) {
if (config.Enabled === true) {
if (config.selectedJackpotType === "Progressive jackpot") {
pj++
}
if (config.selectedJackpotType === "Guaranteed amount") {
ga++
}
if (config.selectedJackpotType === "Guaranteed time") {
gt++
}
if (config.selectedJackpotType === "") {
empty++
}
}
});
if (pj > 1 || ga > 1 || gt > 1 || empty > 0) {
return false;
}
这是有效的,因为您知道这些是用户可以选择的值,但我真的很想有一个更动态的解决方案,如果将来它出现新的可选值类型,验证也可以处理。任何人都可以很好地比较这些值。
- 要使其动态适用于任何选项的数量,请保留每个选定选项的计数(使用具有键值对的对象,其中键是选项,值是它的计数(。
- 最后,遍历每个对象键并检查其值。如果大于
1
,则返回false
,否则返回true
。在下面的代码中,我假设一切都在函数或闭包中。
法典:
var hash = {};
_.filter($("#configSettingsGrid").data().kendoGrid.dataSource.data(), function (config) {
if (config.Enabled === true) {
hash[config.selectedJackpotType] = hash[config.selectedJackpotType] === undefined ? 1 : hash[config.selectedJackpotType] + 1;
}
});
var selected_options = Object.keys(hash);
for(let each_option in selected_options){
if(hash[selected_options[each_option]] > 1){
return false;
}
}
return true;