2013-03-25 19 views
6

In JQuery, perché ottengo information Undefined con il seguente codice?JQuery - lista di stringhe

JS - parte destra è indefinito

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]"> 

risposta

6

Si utilizza l'uguaglianza Comparion ma è necessario utilizzare wild card probabilmente j query attribute starts with^ ma la dichiarazione di cui sopra sarà dare valore al primo elemento abbinato. È possibile utilizzare ciascuno per scorrere tutti gli elementi.

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

Iterare utilizzando each().

Live Demo

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

Modifica Sulla base di commenti OP. Per ottenere i valori di tutte le partite.

Live Demo

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

Ok, ma vorrei salvare questo come elenco di corda come si fa? –

+0

Puoi usare la mappa, controlla la mia risposta aggiornata tra poco. – Adil

+0

Solo un suggerimento, la prossima volta usare 'console.log' invece di' alert'. È fastidioso quando cambia la tabulazione. : | – hjpotter92

5

Perché non si dispone di un elemento il cui nome è == CountAnswer. È necessario specificare un nome specifico, ad esempio:

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

In alternativa, è possibile utilizzare il "inizia con" jolly (^) per abbinare tutti gli elementi il ​​cui nome inizia con CountAnswer:

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

Questo ovviamente, restituirà solo il valore del primo elemento nel set corrispondente, poiché questo è il comportamento di val().

+0

Grazie per il tuo tempo e la tua risposta, ma Adil ha dato di meglio –

3

jsFiddle demo

Si dovrebbe impostare un array per i valori di stringa, e poi su qualche evento utilizzare il selettore jQuery corrispondenza parziale, "starts with"(^), per scorrere nella lista degli ingressi indicato con il nome.

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); 
}); 
Problemi correlati