2010-11-14 241 views
17

当前事件设置为checkboxesevent.target给我点击的复选框的status (checked = true/false)如何从对象中删除属性?

我保持这使所有选定的复选框

var selectedMap = {}; 

if(event.target == true){ 
    var key = event.target.id; 
    var val = event.target.name; 
    selectedMap[key] = val; 
} 

跟踪的对象,我想从地图是未选

else if(event.target == false){ 
    selectedMap.remove(event.target.id); 
} 
当我运行这一点,

删除元素给我错误FirebugselectedMap.remove is not a function

所以我的问题是如何c当复选框未被选中时,我删除元素?

+0

可能重复(http://stackoverflow.com/questions/208105/how-从一个JavaScript对象中删除属性) – Thomas 2012-05-28 19:42:16

回答

32

使用delete

delete selectedMap[event.target.id]; 

你没有正确地设定值,虽然。下面是正确的方法:

if(event.target == true){ 
    var key = event.target.id; // <== No quotes 
    var val = event.target.name; // <== Here either 
    selectedMap[key] = val; 
} 

事实上,你可以:

if(event.target == true){ 
    selectedMap[event.target.id] = event.target.name; 
} 

获取事件目标东西出来的方式,它更容易与简单的字符串设想这样的:

var obj = {}; 
obj.foo = "value of foo"; 
alert(obj.foo); // alerts "value of foo" without the quotes 
alert(obj["foo"]); // ALSO alerts "value of foo" without the quotes, dotted notation with a literal and bracketed notation with a string are equivalent 
delete obj.foo; // Deletes the `foo` property from the object entirely 
delete obj["foo"]; // Also deletes the `foo` property from the object entirely 
var x = "foo"; 
delete obj[x];  // ALSO deeltes the `foo` property 

当使用这样的普通对象时,我总是在我的键上使用前缀以避免问题。 (例如,如果你的目标元素的ID是“toString”会发生什么?该对象已经有一个名为“toString”的[inherited]属性,并且事情很快会变得非常奇怪)。这样的:

if(event.target == true){ 
    selectedMap["prefix" + event.target.id] = event.target.name; 
} 

...当然:

delete selectedMap["prefix" + event.target.id]; 
+1

+1 - 好建议 – 2010-11-14 15:32:20

+0

J.Crowder:现在删除工作正常,感谢您的输入。 – Rachel 2010-11-14 15:40:46

+0

http://stackoverflow.com/questions/6485127/how-to-delete-unset-the-properties-of-a-javascript-object刚才incase你想第二次想到删除 – 2012-08-03 12:12:27

5

你有什么是对象,而不是一个数组(尽管数组是一个对象)。你用{}声明一个对象字面值,而数组字面量用[]声明。

您可以使用delete删除一个对象的属性,像这样

delete selectedMap[event.target.id]; 
的[如何从一个JavaScript对象删除属性]
相关问题