2011-12-07 27 views
7

Ho cercato di aggiungere variabili da un menu a discesa in un array utilizzando la funzione jQuery array.push() ma per qualche strana ragione non funziona. Di seguito è riportato il link jsFiddle: http://jsfiddle.net/dKWnb/3/Jquery array.push() non funziona

JavaScript:

$("#test").live("click",function() { 
     var myarray = new Array(); 
     myarray.push($("#drop").val()); 
     alert(myarray); 
}); 

HTML

<Select name=drop id=drop> 
    <option value=1>1</option> 
    <option value=2>2</option> 
</select> 
<input type=button name=test id=test value=test> 
+0

Cosa dovrebbe fare? Perché fa esattamente ciò che sembra dovrebbe fare. – netiul

+1

Solo una nota: dichiarare sempre gli array in questo modo 'var myarray = [];' –

+0

@DidierG .: Perché? – Matt

risposta

10

Il tuo HTML dovrebbe includere le virgolette per gli attributi: http://jsfiddle.net/dKWnb/4/

Non richiesto quando si utilizza un doctype HTML5 - grazie @bazmegakapa

Ogni volta si crea l'array e si aggiunge un valore ... funziona come previsto ?

Spostare la matrice di fuori della funzione Live() funziona bene:

var myarray = []; // more efficient than new Array() 
$("#test").live("click",function() { 
     myarray.push($("#drop").val()); 
     alert(myarray); 
}); 

http://jsfiddle.net/dKWnb/5/

Si noti inoltre che nelle versioni successive di jQuery v1.7 -> il metodo dal vivo() è deprecato e sostituito dal metodo on().

+2

Utilizza un doctype HTML5. Non è obbligatorio utilizzare le virgolette sui valori degli attributi. – kapa

+2

@bazmegakapa ok capito - ho imparato qualcosa lì - rispondi aggiornato – ManseUK

4

Il codice avvisa il valore corrente della discesa per me, mostrando di aver correttamente spinto nella matrice .

Si desidera mantenere i vecchi valori e aggiungere? Stai ricreando l'array ogni volta, il che significa che il vecchio valore viene danneggiato.

Ecco alcuni codice aggiornato:

var myarray = []; 
$("#test").click(function() { 
    myarray.push($("#drop").val()); 
    alert(myarray); 
}); 

jsFiddle