2013-08-24 13 views
14

Ho questo javascript + html per compilare un menu a discesa ma non funziona, sto facendo qualcosa di sbagliato? Nota Voglio che il menu a tendina per essere riempito a pagina Loadaggiungi elemento all'elenco a discesa in html utilizzando javascript

<!DOCTYPE html> 
    <html> 
    <head> 
    <script> 
    function addList(){ 
    var select = document.getElementById("year"); 
    for(var i = 2011; i >= 1900; --i) { 
    var option = document.createElement('option'); 
    option.text = option.value = i; 
    select.add(option, 0); 
     } 
    } 
    </script> 
    </head> 

    <body> 

     <select id="year" name="year"></select> 

    </body> 
    </html> 
+0

possibile duplicato di [come faccio ad aggiungere la possibilità di un elenco a discesa form html con javascript] (http://stackoverflow.com/questions/10992261/how-do- i-add-an-option-to-a-html-form-dropdown-list-with-javascript) –

+0

@HashemQolami Non ho un pulsante e quindi sono confuso su dove mettere la funzione. –

risposta

16

Dal momento che lo script è in <head>, è necessario avvolgerlo in window.onload:

window.onload = function() { 
    var select = document.getElementById("year"); 
    for(var i = 2011; i >= 1900; --i) { 
     var option = document.createElement('option'); 
     option.text = option.value = i; 
     select.add(option, 0); 
    } 
}; 

Si può anche farlo in questo modo

<body onload="addList()"> 
0

Penso che tu abbia solo definito la funzione. non lo stai innescando da nessuna parte.

si prega di fare

window.onload = addList(); 

o innescare su qualche altro evento

dopo la sua definizione

vedono questo fiddle

0

Prova questo:

select.appendChild (opzione);

0

Prova questa

<script type="text/javascript"> 
    function AddItem() 
    { 
     // Create an Option object  
     var opt = document.createElement("option");   

     // Assign text and value to Option object 
     opt.text = "New Value"; 
     opt.value = "New Value"; 

     // Add an Option object to Drop Down List Box 
     document.getElementById('<%=DropDownList.ClientID%>').options.add(opt); 
    } 
<script /> 

Il Valore aggiungerà alla discesa.

6

Per prestazioni più elevate, vi consiglio questo:

var select = document.getElementById("year"); 
var options = []; 
var option = document.createElement('option'); 

//for (var i = 2011; i >= 1900; --i) 
for (var i = 1900; i < 2012; ++i) 
{ 
    //var data = '<option value="' + escapeHTML(i) +'">" + escapeHTML(i) + "</option>'; 
    option.text = option.value = i; 
    options.push(option.outerHTML); 
} 

select.insertAdjacentHTML('beforeEnd', options.join('\n')); 

questo modo si evita un ridisegno dopo ogni appendChild, che accelera il processo considerevolmente, soprattutto per un maggior numero di opzioni.

opzionale per generare la stringa a mano:

function escapeHTML(str) 
{ 
    var div = document.createElement('div'); 
    var text = document.createTextNode(str); 
    div.appendChild(text); 
    return div.innerHTML; 
} 

Tuttavia, non vorrei usare questo tipo di metodi a tutti.
Sembra grezzo. È meglio farlo con un frammento di documento:

var docfrag = document.createDocumentFragment(); 

for (var i = 1900; i < 2012; ++i) 
{ 
    docfrag.appendChild(new Option(i, i)); 
} 

var select = document.getElementById("year"); 
select.appendChild(docfrag); 
+0

E se volessi semplicemente sostituire il valore anziché aggiungerlo? Come potrei farlo? – Eli

Problemi correlati