2010-11-14 445 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對象刪除屬性]
相關問題