2013-03-25 10 views
6

W JQuery, dlaczego mam information Undefined z następującego kodu?JQuery - lista ciągów

JS - prawa część jest niezdefiniowany

var s = $("[name='CountAnswer']").val(); 

HTML

<input style="width:150px" type="text" id="CountAnswer_1_" name="CountAnswer[1]"> 
<input style="width:150px" type="text" id="CountAnswer_2_" name="CountAnswer[2]"> 
<input style="width:150px" type="text" id="CountAnswer_3_" name="CountAnswer[3]"> 

Odpowiedz

6

Używasz comparion równości, ale trzeba wykorzystać dziką kartę prawdopodobnie j query attribute starts with^ ale powyższe oświadczenie woli podaj wartość pierwszego dopasowanego elementu. Możesz użyć każdego do iteracji przez wszystkie elementy.

var s = $("[name^='CountAnswer']").val(); 

Iterowanie przy użyciu each().

Live Demo

$("[name^='CountAnswer']").each(function(){ 
    alert($(this).val()); 
    //or 
    alert(this.value); 
}); 

Edit podstawie OP komentarzach. Aby uzyskać wartości wszystkich dopasowań.

Live Demo

strValues = $("[name^='CountAnswer']").map(function(){ 
    return this.value; 
}).get().join(','); 
+0

ok, ale chciałbym, aby zapisać to jako Lista sznurkiem jak to zrobić? –

+0

Możesz użyć mapy, sprawdź moją zaktualizowaną odpowiedź od jakiegoś czasu. – Adil

+0

Tylko wskazówka, następnym razem użyj 'console.log' zamiast' alert'. Jest to denerwujące, gdy zmienia się ostrość karty. : | – hjpotter92

5

Ponieważ nie ma element, którego nazwa jest == CountAnswer. Musisz podać konkretną nazwę, na przykład:

$("[name='CountAnswer[1]']").val(); 

Alternatywnie, można użyć „zaczyna się od” asterisk (^), aby dopasować wszystkie elementy, których nazwa zaczyna się CountAnswer:

$("[name^='CountAnswer']").val(); 

ten oczywiście tylko zwróci wartość pierwszego elementu w dopasowanym zestawie, ponieważ jest to zachowanie val().

+0

Dziękuję za poświęcony czas i odpowiedź, ale Adil dał coś lepszego –

3

jsFiddle demo

Należy założyć tablicę dla ciągów znaków, a następnie w pewnym przypadku korzystania z selektora jquery częściowe dopasowania, "starts with"(^), iteracyjne na liście wejść oznaczonych nazwą.

demo html: js

<input value="a" style="width:150px" type="text" id="CountAnswer_1_" name="CountAnswer[1]"> 
<input value="b" style="width:150px" type="text" id="CountAnswer_2_" name="CountAnswer[2]"> 
<input value="c" style="width:150px" type="text" id="CountAnswer_3_" name="CountAnswer[3]"> 
<br><input type="button" id="b" value="show string list" /><div id="console"></div> 

demo:

var stringList = []; 
$('#b').click(function(){ 
stringList = []; 
$("[name^='CountAnswer']").each(function(){ 
    stringList.push(this.value); 
}); 
var c = $("#console"); 
for(var i = 0; i < stringList.length; i++){ 
    var d = $("<div>"); 
    d.html(stringList[i]); 
    c.append(d); 
} 
console.log(stringList); 
}); 
Powiązane problemy