2012-03-15 18 views
6

Ho un array HTML;ottieni elementi di array html con jquery

<input class="input_box" name="authors[]" id="author1"/> 

quello che voglio fare è, ottenere il valore di questo array un display senza aggiornare la pagina, (faccio visualizzare il valore proprio accanto al campo di immissione, in modo indipendente div)

$(document).ready(function(){  
$("input[id^="author"]").change(update); 
}); 
    function update(){ 
    var authors=new Array(); 
    $("input[id^="author"]").each(function(){authors.push($(this).text()) }); 
    var author= '"' + authors.join('", "') + '"'; 

    $('#val-authors').html('authors:<span class="red"> "'+author+'"</span>');} 

l'unica cosa che vedo in <div id="val-authors"> is, "",

cosa mi manca?

grazie in anticipo ..

risposta

7

tuo selettore:

$("input[id^="author"]") 

non è corretto, perché si sta cercando di usare le virgolette all'interno doppi apici. Una delle coppie deve essere citazioni singole.

Se si stesse utilizzando un debugger JS questo dovrebbe essere immediatamente visibile.

FWIW, questo è un modo più pulito di recuperare la matrice desiderata:

var authors = $('input[id^="author"]').map(function() { 
    return this.value; 
}).get(); 
1

Cambio:

$("input[id^="author"]").change(update); 

A:

$("input[id^='author']").change(update); 
3

tuo "allineamento html" non è un array a tutti, anche supponendo che ci siano un certo numero di altri input simili (anche se il modulo viene inviato come lingua del server sul lato scelto kely ti consente di accedere ai valori degli ingressi con lo stesso nome di un array). Comunque ...

Il problema principale è che il vostro JS ha un errore di sintassi:

$("input[id^="author"]") 

Se si desidera includere virgolette all'interno di una stringa con virgolette doppie letterale quello che dovete fare loro fuga:

$("input[id^=\"author\"]") 

o citare la stringa con singoli:

$('input[id^="author"]') 

può essere più efficace per evitare il attribuire inizia-con selettore con l'attributo id e selezionare dall'attributo name, notando che per jQuery devono essere escape con barre rovesciate le parentesi quadre nel nome atttribute, e per JS letterali stringa backslash devono anche essere sfuggito:

$('input[name="authors\\[\\]"]') 

anche per ottenere il valore di un ingresso con jQuery utilizzare .val() piuttosto che .text(), ma è più efficiente di utilizzare solo this.value:

var authors = []; 
$('input[id^="author"]').each(function(){ authors.push(this.value); }); 

io consiglierei anche gli array dichiarano con = [] piuttosto che = new Array().

+0

grazie @nnnnnn, non ho menzionato qui ma ho un altro javascript che si aggiunge agli autori [], quindi ho più autore in effetti. ho provato il tuo consiglio e replacev .text() a .val(), e baam! grazie .. – teutara

+0

Cool. Felice di aiutare. (Ho capito che tu avevi più elementi 'authors []', ma il mio punto sull'array è che html non ha array.) – nnnnnn

Problemi correlati