2011-09-27 22 views
0

我正在嘗試使用.data()方法來存儲使用變量的數據。但是,由於某種原因,它不起作用。這裏是我的概念證明代碼:如何使用對象設置jQuery.data()

var option = 'x'; 
$(this).data({ 'x' : 0 }); 
alert($(this).data(option)); 
$(this).data({ option : 20 }); 
alert($(this).data(option)); 

令人驚訝的兩個警報返回0,而不是爲0,然後20.任何幫助,非常感謝!謝謝!

+2

由於這是回答,讓我告訴你一個祕密:用戶Chrome或Firefox開發者工具和使用的console.log(...)而不是警報(.. ),它會爲你節省很多時間。 – Felipe

+0

謝謝@Felipe! –

回答

1

的問題是,你option關鍵字在你的對象中,literal被解釋爲鍵的文字字符串,而不是x(這只是對象文字的工作方式)。如果你想能夠使用變量鍵,你需要使用一個臨時對象。例如,

var option = 'x'; 
$(this).data({ 'x' : 0 }); 
alert($(this).data(option)); 
// create a data object so you can use a variable for the key 
var obj = {}; 
obj[option] = 20; 
$(this).data(obj); 
alert($(this).data(option)); 
3

這是因爲在第二個版本中,您引用的是「選項」鍵而不是變量選項(鍵「x」)。

var option = 'x'; 
$(this).data({ 'x' : 7 }); 
console.log($(this).data(option)); 
$(this).data({ option : 20 }); 
console.log($(this).data('option')); 

這方面的一個簡單的版本:

option = 'x'; 
console.log({option: 20}); 

輸出:

Object { option=20 } 

但是,您可以使用一個變量使用key value syntax

$(this).data(option, 20); 
+0

謝謝澄清。但是,如何在不明確使用'x'的情況下如何設置'x'的數據值?或者,如何在不使用'x'的情況下設置'x'的值。謝謝! –

+0

使用我在上一個代碼塊中提到的鍵值語法。 – Gazler

2

您要訪問的屬性......這樣的..

$(this).data({ option : 20 }); 
alert($(this).data('option')); 
0

的原因是你的第二個

$(this).data({ option : 20 }); 

20option屬性,當你實際上是將其設置爲x屬性。

我覺得這是你想要做的,而不是什麼:

var option = 'x'; 
$(this).data({ x : 0 }); 
alert($(this).data(option)); 
$(this).data({ x : 20 }); 
alert($(this).data(option)); 

或者,您可以改用鍵值的語法如下:

var option = 'x'; 
$(this).data(option, 0); 
alert($(this).data(option)); 
$(this).data(option, 20); 
alert($(this).data(option)); 
0

數據對象的關鍵字不能是變量。

你可以做的是:

var option = 'x'; 
var data = {}; 
data['x'] = '0'; 
$(this).data(data); 
alert($(this).data(option));