在Javascript中获取关联数组数组的索引
Getting the Index of an Array of Associative Arrays in Javascript
我有一个"关联数组"的数组,即对象,它保存了各种HTML元素的数据和其他一个类似的参数:
container[0] = { picker_canvas: document.getElementById("background_picker"),
color_canvas: document.getElementById("background_color"),
hex_text: document.getElementById("background_text"),
mouse_down: false };
container[1] = { picker_canvas: document.getElementById("textbox_picker"),
color_canvas: document.getElementById("textbox_color"),
hex_text: document.getElementById("textbox_text"),
mouse_down: false };
container[2] = { picker_canvas: document.getElementById("font_picker"),
color_canvas: document.getElementById("font_color"),
hex_text: document.getElementById("font_text"),
mouse_down: false };
每个容器都有一个对颜色选择器画布、颜色预览画布、显示十六进制颜色值的文本框和mouse_down
布尔值的引用。稍后,我通过如下容器进行迭代来初始化一些事件侦听器:
for (i=0; i<3; i++) {
container[i].picker_canvas.addEventListener("mousedown", function() {
container[i].mouse_down = true;
}, false);
container[i].picker_canvas.addEventListener("mouseup", function() {
container[i].mouse_down = false;
}, false);
container[i].picker_canvas.addEventListener("mousemove", function(evt) {
getColor(container[i], evt);
}, false);
container[i].hex_text.addEventListener("change", function(evt) {
drawColorSquare(container[i], evt.target.value)
}, false);
}
但这不起作用,因为i
变得未定义,所以我现在正试图通过这样做来获得正确的索引,但我不确定如何在Javascript 中实际实现它
container[i].picker_canvas.addEventListener("mousedown", function(evt) {
container[container.indexof(evt.target)].mouse_down = false;
}, false);
基本上,我需要在关联数组的数组中搜索evt.target
,并让它返回数组的索引。那么,对于任何内置的Javascript函数来说,这是可能的吗?还是我只需要自己制作?
由于您似乎不必担心Internet Explorer 8及更早版本,请使用forEach
:
container.forEach(function(x) {
x.picker_canvas.addEventListener("mousedown", function() {
x.mouse_down = true;
}, false);
x.picker_canvas.addEventListener("mouseup", function() {
x.mouse_down = false;
}, false);
x.picker_canvas.addEventListener("mousemove", function(evt) {
getColor(x, evt);
}, false);
x.hex_text.addEventListener("change", function(evt) {
drawColorSquare(x, evt.target.value)
}, false);
});
由于我们不必在这里支持IE8,我们可以全力以赴:
container.forEach(function(x) {
x.handleEvent = function(e) { //This is stupid, wish I had the time to refactor the code to use prototypes
switch (e.type) {
case "mousedown":
this.mouse_down = true;
break;
case "mouseup":
this.mouse_down = false;
break;
case "mousemove":
getColor(this, e);
break;
case "change":
drawColorSquare(this, e.currentTarget.value);
break;
}
};
var canvas = x.picker_canvas;
canvas.addEventListener("mousedown", x, false);
canvas.addEventListener("mouseup", x, false);
canvas.addEventListener("mousemove", x, false);
x.hex_text.addEventListener("change", x, false);
});
相关文章:
- 按最大值获取数组索引
- 删除和重用数组索引
- 警报数组索引和值
- .fadeIn .fadeOut 会导致数组索引出现奇怪的行为
- Javascript原型通用Enquries和通过数组索引分配Id
- 获取数组索引的值
- Javascript-将值与关联数组索引进行比较
- Javascript-在数组索引中循环的问题
- JavaScript - “规范化”数组索引
- 数组索引混淆
- 使用 Javascript/React.js 查找对象的数组索引
- 如何拆分数组索引
- 获取新推送元素的数组索引
- 在 javascript 中将数组索引作为参数传递
- 当对象本身存储在 JavaScript 的数组索引中时,如何打印对象的每个单独属性
- 如何使用数组索引序列
- ASP.NET/JavaScript:数组索引溢出:实体框架/LINQ
- 如何在分配给数组索引的对象上调用方法
- 使用铆钉访问数组索引.js
- 计算 Javascript 数组索引的出现次数