2011-09-10 36 views
2

如何将JavaScript中的对象与HTML元素相关联或关联?如何将JavaScript中的对象关联或关联到HTML元素?

对于数组中的每个对象,我生成一个基于该对象的复选框输入元素。

如果我添加一个事件侦听器来捕获复选框更改,如何检索与该元素关联的对象?

+0

相关:[?自定义属性 - 是还是不是(http://stackoverflow.com/questions/992115/) –

回答

1

您可以为每个复选框生成一个ID,并将该ID存储在相应的对象中。然后,在事件处理程序中,您可以获取已更改复选框的ID,并通过迭代数组来找到适当的对象。

为了更容易找到对象,还可以将ID映射到对象(例如objectsByID[someID] = someObject)。采用这种方法,您甚至不必遍历数组。

的如何创建objectsByID地图示例:

var objectsByID = {}; 

for (var i = 0; i < objects.length; i++) { 
    var id = "checkbox_" + i; 

    var checkbox = document.createElement("input"); 
    checkbox.setAttribute("type", "checkbox"); 
    checkbox.setAttribute("id", id); 
    // ... 

    objectsByID[id] = objects[i]; 
} 
1

您为每个复选框提供一个渐进ID,从“checkbox0”开始,当您单击复选框时,将检查与数组[x]中的对象相对应的相对ID号。

这是一个非常简单的example

4

作为其他的答案指出,产生一个唯一的id对每个DOM节点,可以使用那些作为键中的对象。

另一种可能性是许多框架提供了将数据分配给DOM元素的工具。例如,在jQuery中,你可以通过编写$(checkbox).data('mydata', obj)或YUI Y.one(checkbox).setData('mydata', obj)来完成。

+1

虽然你不需要任何框架值分配给DOM元素。简单的'checkbox.mySrcObject = objects [i]'会做。 +1 –

1

创建全局对象,在创建复选框时存储其他对象,并用唯一名称标识。将该复选框元素的名称id属性设置为此唯一名称。

var source = []; 
var data = []; //Your data 
var appendTo = document.body;//Anywhere 
for(var i=0; i<data.length;i++){ 
    var identifier = "chk"+i; 
    var inp = document.createElement("input"); 
    inp.type = "checkbox"; 
    inp.name = identifier;//.name or .id - it's up to your preference 
    inp.addEventListener("change", function(ev){ 
    if(this.checked){ 
     callback(source[this.name]);//calls function callback, passing the original object as an argument. 
    } 
    }, true); 
    appendTo.appendChild(inp); 
    source[identifier] = ...//your object. 
}