目前在checkboxes
上设置了一个活动,event.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);
}
当我运行此操作时,它会在Firebug
:selectedMap.remove is not a function
所以我的问题是 如果取消选中该复选框,我该如何删除元素?
答案 0 :(得分:33)
使用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 :(得分:6)
你拥有的是一个对象而不是一个数组(尽管数组是一个对象)。使用{}
声明对象文字,而使用[]
声明数组文字。
您可以使用delete
删除像这样的对象属性
delete selectedMap[event.target.id];