2013-08-24 18 views
14

Mam ten javascript + html do wypełnienia menu rozwijanego, ale to nie działa, czy robię coś nie tak? Uwaga Chcę rozwijanego menu należy wypełnić na stronie obciążeniadodać pozycję do listy rozwijanej w html przy użyciu 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

możliwe duplikat [jak mogę dodać opcję do listy rozwijanej z formularza html javascript] (http://stackoverflow.com/questions/10992261/how-do- i-add-an-option-to-a-html-form-dropdown-list-with-javascript) –

+0

@HashemQolami Nie mam przycisku i dlatego jestem zdezorientowany, gdzie umieścić funkcję. –

Odpowiedz

16

Ponieważ skrypt jest w <head>, trzeba zawinąć go w 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); 
    } 
}; 

Można również zrobić to w ten sposób

<body onload="addList()"> 
0

myślę, że masz tylko określona funkcję. nie uruchamiasz go nigdzie.

proszę

window.onload = addList(); 

lub wywołać go na innego zdarzenia

po jej definicji

zobaczyć ten fiddle

0

Spróbuj:

select.appendChild (opcja);

0

Spróbuj

<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 /> 

Wartość dołączy do listy rozwijanej.

6

uzyskać wyższą wydajność, polecam to:

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')); 

W ten sposób unika się narysowany po każdym appendChild, który przyspiesza proces znacznie, zwłaszcza w przypadku większej liczby opcji.

Opcjonalnie do generowania ciąg ręcznie:

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

Jednak nie użyłby tego rodzaju metod w ogóle.
Wydaje się być prymitywnym. Lepiej to zrobić z documentFragment:

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

Co zrobić, jeśli chcę tylko zastąpić wartość zamiast dołączania? Jak to zrobić? – Eli

Powiązane problemy