2013-11-14 27 views
1

我期待循環瀏覽我的頁面上的所有輸入,併爲每個使用id作爲名稱聲明一個變量。這是我沒有成功嘗試jquery/javascript聲明來自字符串的變量

$('input').each(function(){ 
    eval('var'+$(this).attr('id')+'='+$(this).val()); 
}); 
+1

你爲什麼要這些變量....你爲什麼不能使用對象 –

+0

我喂結果納入現有的腳本 –

+0

@DouglasCottrell使用JSON對象,這樣你就可以在你的代碼 –

回答

2

試試這個看看,如果這個工程:

$('input').each(function(){ 
     window[this.id] = this.value; 
    }); 
+2

如果您必須這樣做,請執行'window [this.id] = this.value;'。 – lonesomeday

+0

@JohannesH。更重要的是,即使我們使用jQuery(而且它本身並不是一件壞事),執行'$(this).attr('id')'仍然是一個壞主意。 – lonesomeday

+0

@lonesomeday我會考慮使用jQuery來處理沒有任何更復雜的任務,而不是一件壞事。這非常慢 - 請參閱我的答案中的測試案例。但是你有一點當然;) –

1
$('input').each(function(){ 
    window[this.id]=this.value; 
}); 

由於所有變量是窗口的對象,就可以啓動變量這樣

+0

+1不使用jQuery獲取ID。但是,仍然沒有理由將其用於循環... –

0

這是一個沒有任何jQuery的解決方案。簡單的舊Javascript。 Way faster,更容易閱讀,沒有缺點。 Jeez,爲什麼所有人都在開始學習jQuery之前,他們已經掌握了基礎知識?

var inputs = document.getElementsByTagName('input'); 
for (var i = 0 ; i < inputs.length ; i++) { 
    window[inputs[i].id] = inputs[i].value; 
} 

在最近版本的所有majot瀏覽器,你可以使用querySelectorAll()同樣的事情。它更加靈活,但幾乎和jQuery一樣慢。

var inputs = document.querySelectorAll('input'); 
for (var i = 0 ; i < inputs.length ; i++) { 
    window[inputs[i].id] = inputs[i].value; 
} 
+0

這是一個有趣的性能比較,儘管在實踐中並不是壓倒性的,在我看來(除非我們在很多* *上做了很多*測試數據)。但我不得不說,我不同意你的循環更容易閱讀!如果我在我自己的代碼中執行此操作(我不會,因爲它本質上很愚蠢),我會在幾乎所有情況下使用jQuery進行選擇和循環,只要它已被加載。 – lonesomeday

+0

@lonesomeday如果你不喜歡循環,請使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach - 它幾乎看起來像jQuery之後(只有函數名稱有點長)。 'document.getELementsByTagName('input')。forEach(function(element){/*...*/});' 不要誤解我的意思,我使用jQuery自己,特別是在處理AJAX時。因此,如果無論如何都加載了,那麼可以懶惰,而我們只需要簡單的任務。但是當我看到人們使用jQuery來處理所有事情時,如果他們甚至知道普通的JS,我總是會好奇的。 –

+0

雖然這不起作用,因爲'getElementsByTagName'不返回數組。但你是對的,即學習如何做的事情,即使他們總是使用jQuery,對於JS開發人員來說,DOM方式總是很好。 – lonesomeday