2013-08-23 61 views
0

可變到目前爲止,我有:循環遍歷多個輸入和保存的答案爲使用jQuery

$('.the-inputs input').each(function() { 
    userAnswer = $(this).val(); 
}); 

但是,如果我console.log了這一點,它出來在不同的行(這是一個數組?)我希望它是一個字符串。

因此,如果用戶在兩個輸入中輸入「Hello」「World」,我想要變量userAnswer = "Hello World"

我還需要在函數外可訪問的變量。我是否有權放棄var來實現這一目標?

+0

聲明userAnswer全球和串聯 –

+0

的jQuery對象的每個函數將運行你的每一個選擇,你匹配的元素定義一旦回調函數輸入。這就是爲什麼您在控制檯日誌 – DGS

+0

中收到單獨的行,'var'聲明只確定其全局變量或僅在函數範圍內確定。無論哪種方式,每個循環的每個illitration將覆蓋它到'$(this).val()' – Martijn

回答

1
var userAnswer = ''; 

$('.the-inputs input').each(function() { 
userAnswer += $(this).val() + ' '; // add to string 
}); 

userAnswer = $.trim(userAnswer); 

console.log(userAnswer); 
+0

除了一件事情之外,它完美地工作,控制檯在字符串之前顯示未定義。所以如果我在輸入中輸入「foo」和「bar」,我會在控制檯中得到'undefinedfoo bar' ...爲什麼會這樣呢? – jpsear

+0

,因爲在第一個循環中'userAnswer'是未定義的(它沒有給出一個值),其他答案將堅持。修復它'var userAnswer ='';'。現在第一個值將是一個空字符串 – Martijn

+0

優秀 - 完美的作品。謝謝大家。 – jpsear

6

您可以使用.map()來解決這個問題:

var userAnswer = $('.the-inputs input').map(function() { 
    return $(this).val(); 
}).get().join(' '); 
+1

簡單而有效。 – JonathanRomer

+0

地圖vs每個地圖的優勢是什麼?我認爲'each()'有更多的可讀性,但我認爲它與jQuery處理它們的方式有關。 – Martijn

+0

嗯,這不適合我。我確定這是一個有效的方法,但是我得到了'Uncaught TypeError:Object [object Object]在控制檯中沒有方法'join'... ... – jpsear