2013-02-21 86 views
3

我面對一個問題如下JavaScript對象的值:獲取多個輸入字段具有相同的類並加入到

<input title="1" type="text" class="email"> 
<input title="2" type="text" class="email"> 
<input title="3" type="text" class="email"> 

以上是我的html在那裏我試圖抓住每一個輸入框的電子郵件和將其存儲在標題作爲關鍵字的對象中。

這裏是我的JavaScript目前看起來像

var emailObj = {}; 
$("input[class=email]").each(function() { 

    var id = $(this).attr("title"); 
    var email = $(this).val() 

    emailObj[id] = email; 
}); 

目前的console.log顯示添加到該對象只有最後一個值,如下所示。

Object { 3="[email protected]"} 

凡我預期的結果應該像下面顯示

Object { 1="[email protected]", 2="[email protected]", 3="[email protected]"} 

有人能提供一些線索在這一問題上對我好嗎?

感謝您的閱讀, 關心。

+4

無法重現:http://jsfiddle.net/Lj24q/。 – 2013-02-21 15:42:23

+0

不知道它是否適合你的情況,但爲什麼不使用'.serializeArray();'並把標題作爲名稱。你只需要注意在服務器端的部分因爲它會是一個'{name:「」,value:「」}' – 2013-02-21 15:57:29

+0

@FelixKling數組他可能會寫出正確的代碼,可能是他認爲代碼不工作,因爲在代碼執行時,文本框的值爲空 – Exception 2013-02-21 16:23:15

回答

0

您的taskArray實際上是一個object,而不是一個數組。

更換var taskArray = {}這個應該可以解決問題:

var taskArray = new Array(); 

編輯:在第二個想法,你已經什麼是完全有效的!

我編輯我的回答重複一下我在評論中說過:你需要使用控制檯調試:

.each(),放:console.log(id); - 預期的結果將是「1 「,」2「,」3「 - 如果它只是」3「,這可能意味着您的其他輸入不會因任何原因被拾取。如果這是結果,則在分配值console.log(emailObj[id]);後打印出對象。

+0

*有什麼問題?*代碼看起來絕對很好。使用一個對象,並將其稱爲'taskArray'很奇怪,但這不是一個錯誤。 – 2013-02-21 15:46:09

+0

是的,我剛剛拿起那本身!衛生署! – 2013-02-21 15:47:15

+0

編輯名稱,抱歉關於= – BaconJuice 2013-02-21 15:48:17

8

There與您的代碼沒有問題。我建議你把它寫成實用方法

function getValues(selector){ 
    var tempValues = {}; 
    $(selector).each(function(){ 
    var th= $(this); 
    tempValues[th.attr('title')] = th.val(); 
    }); 
    return tempValues; 
} 

var values = getValues('.email'); 

或者如果你想值到一個數組

$('.email').map(function(){return $(this).val(); }).get(); 

.get()將其轉換爲規則陣列。

你寫的代碼是絕對正確的。但是當我加載它時,我返回null,因爲在執行時,文本框中沒有值。

相關問題