目前设置了一个事件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;
}
Run Code Online (Sandbox Code Playgroud)
我想从地图中删除未选中的元素
else if(event.target == false){
selectedMap.remove(event.target.id);
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它给我错误Firebug:selectedMap.remove is not a function
所以我的问题是当取消选中复选框时如何删除元素?
T.J*_*der 33
使用delete:
delete selectedMap[event.target.id];
Run Code Online (Sandbox Code Playgroud)
但是,您正在设置错误的值.这是正确的方法:
if(event.target == true){
var key = event.target.id; // <== No quotes
var val = event.target.name; // <== Here either
selectedMap[key] = val;
}
Run Code Online (Sandbox Code Playgroud)
事实上,你可以:
if(event.target == true){
selectedMap[event.target.id] = event.target.name;
}
Run Code Online (Sandbox Code Playgroud)
将事件目标放在一边,用简单的字符串来设想它更容易:
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
Run Code Online (Sandbox Code Playgroud)
当使用像这样的普通对象时,我总是在我的键上使用前缀来避免问题.(例如,如果您的目标元素的ID是"toString"会发生什么?该对象已经有一个名为"toString"的[inherited]属性,并且很快就会非常奇怪.)
所以对我来说,我这样做:
if(event.target == true){
selectedMap["prefix" + event.target.id] = event.target.name;
}
Run Code Online (Sandbox Code Playgroud)
...而且当然:
delete selectedMap["prefix" + event.target.id];
Run Code Online (Sandbox Code Playgroud)
你拥有的是一个对象而不是一个数组(尽管数组是一个对象).您声明了一个对象文字,{}而声明了一个数组文字[].
您可以使用它delete来删除对象属性
delete selectedMap[event.target.id];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22278 次 |
| 最近记录: |