2010-11-14 3 views
17

В настоящее время это событие выставляется как 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

Так что мой вопрос: Как c Я удаляю элемент, когда флажок не выбран?

+0

возможно дубликат [Как удалить свойство из объектов JavaScript] (http://stackoverflow.com/questions/208105/how- to-remove-a-property-from-a-javascript-object) – Thomas

ответ

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 

При использовании простого объекта, подобного этому, я всегда использую префикс на своих ключах, чтобы избежать проблем. (Например, что произойдет, если идентификатор вашего целевого элемента был «toString»? Объект уже имеет свойство [inherited], называемое «toString», и все получится очень странно очень быстро).

Так что для меня это:

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

... и конечно:

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

+1 - хороший совет –

+0

J.Crowder: Удалить сейчас отлично, спасибо за ваш вклад. – Rachel

+0

http://stackoverflow.com/questions/6485127/how-to-delete-unset-the-properties-of-a-javascript-object just incase u want second thought on delete –

5

что у вас есть объект, а не массив (хотя массив является объектом). Вы объявляете литерал объекта с {}, тогда как литерал массива объявляется с [].

Вы можете использовать delete, чтобы удалить свойство объекта, как так

delete selectedMap[event.target.id]; 
Смежные вопросы