Javascript 发现';键';在基于';多值';
以下面的简化JS对象(JS Fiddle:)为例——我想是模拟多维关联数组Javascript 发现';键';在基于';多值';,javascript,jquery,html,Javascript,Jquery,Html,以下面的简化JS对象(JS Fiddle:)为例——我想是模拟多维关联数组 var ControlMap = { tb_RosMon: { row: 1, col: 1 }, tb_RosTue: { row: 1, col: 2 }, tb_RosWed: { row: 1, col: 3 }, tb_RosThu: { row: 1, col: 4 }, tb_RosFri: { row: 1, col: 5 }, tb_RosSat: { r
var ControlMap = {
tb_RosMon: { row: 1, col: 1 },
tb_RosTue: { row: 1, col: 2 },
tb_RosWed: { row: 1, col: 3 },
tb_RosThu: { row: 1, col: 4 },
tb_RosFri: { row: 1, col: 5 },
tb_RosSat: { row: 1, col: 6 },
tb_RosSun: { row: 1, col: 7 },
tb_AbsMon: { row: 2, col: 1 },
tb_AbsTue: { row: 2, col: 2 },
tb_AbsWed: { row: 2, col: 3 },
tb_AbsThu: { row: 2, col: 4 },
tb_AbsFri: { row: 2, col: 5 },
tb_AbsSat: { row: 2, col: 6 },
tb_AbsSun: { row: 2, col: 7 },
ddl_ReasonMon: { row: 3, col: 1 },
ddl_ReasonTue: { row: 3, col: 2 },
ddl_ReasonWed: { row: 3, col: 3 },
ddl_ReasonThu: { row: 3, col: 4 },
ddl_ReasonFri: { row: 3, col: 5 },
ddl_ReasonSat: { row: 3, col: 6 },
ddl_ReasonSun: { row: 3, col: 7 },
tb_AddMon: { row: 4, col: 1 },
tb_AddTue: { row: 4, col: 2 },
tb_AddWed: { row: 4, col: 3 },
tb_AddThu: { row: 4, col: 4 },
tb_AddFri: { row: 4, col: 5 },
tb_AddSat: { row: 4, col: 6 },
tb_AddSun: { row: 4, col: 7 },
Mon_AddReason: { row: 5, col: 1 },
Tue_AddReason: { row: 5, col: 2 },
Wed_AddReason: { row: 5, col: 3 },
Thu_AddReason: { row: 5, col: 4 },
Fri_AddReason: { row: 5, col: 5 },
Sat_AddReason: { row: 5, col: 6 },
Sun_AddReason: { row: 5, col: 7 }
}
这基本上是输入id(tb_RosMon
,tb_AbsMon
等)及其在HTML
中的行和列的映射。我正在尝试向相关输入添加键导航(上、下、左和右)
i、 e.如果用户在打开tb_Absue
时按下向下箭头,我将获取tb_Absue
的位置,如下所示:
var row = ControlMap[SourceID]["row"]; //Returns 2
var col = ControlMap[SourceID]["col"]; //Returns 2
然后我将按1递增行(当他们按下时),以给出第3行第2列的目的地。然后我需要搜索上面的对象,查看第3行第2列是否存在输入(tb#####)并返回其ID
一个人怎么能这样做?普通的JS或JQuery就可以了。
对象。键
和一些键可以:
var id;
Object.keys(ControlMap).some(function(key) {
var entry = ControlMap[key];
if (entry.row == desiredRow && entry.col == desiredCol) {
id = key;
return true; // Stops the loop
}
return false;
});
这些都是ES5的特性,但对于IE8和其他较旧的浏览器来说,它们都是可多填充的。或者,您也可以在中使用:
var id;
var key;
var entry;
for (key in ControlMap) {
entry = ControlMap[key];
if (entry.row == desiredRow && entry.col == desiredCol) {
id = key;
break;
}
}
我会认真地建议重新考虑这个数据结构,但如果你被它卡住了,那么很遗憾,我需要支持IE7+,所以我需要按照你的建议去做。谢谢。@HeavenCore:对象。键
和数组#一些
都可以为IE7多填充。但是,for in
works.:-)