Search code examples
javascriptinnerhtml

Javascript - innerHTML not working with HTML select menus


In my HTML page I have 2 select menus with IDs "month" and "day" - "day" is empty when the page loads, "month" has 12 options with values 1-12 corresponding to January - December.

"month" has an onchange event which calls this function:

function showOutboundDays(month)
{
if(month==4 || month==6 || month==9 || month==11)
    document.getElementById('day').innerHTML='<option value="1">1</option><option value="2">2</option>'; etc. up to 30
else if(month==2)
    document.getElementById('day').innerHTML='<option value="1">1</option>'; etc. up to 28
else 
    document.getElementById('day').innerHTML='<option value="1">1</option>'; etc. up to 31
}

(just imagine there are braces around the option tags to help you see...)

I think it's pretty clear to see what I'm trying to achieve...and everything works fine apart from the innerHTML of the select with ID "day" doesn't get filled at all, regardless of what month you pick. And I know the problem is with this stage of the function because when I change the if, elseif and else code-to-be-executed to alerts or something similar, it works fine.

Does anybody know what the problem with the innerHTML is?

Thanks

EDIT: Using Firefox 3.6


Solution

  • This is a known issue for IE.

    KB article with workaround: http://support.microsoft.com/kb/276228

    Also: dupe of: innerHTML replace does not reflect

    EDIT: Here is my working sample based on your code:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     <title>Selects</title>
     <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
     <style rel="stylesheet" type="text/css">
     </style>
     <script>
    function showOutboundDays(month) 
    { 
        if(month==4 || month==6 || month==9 || month==11) 
            document.getElementById('day').innerHTML='<option value="1">1</option><option value="2">2</option>';
        else if(month==2) 
            document.getElementById('day').innerHTML='<option value="1">3</option><option value="1">4</option>';
        else  
            document.getElementById('day').innerHTML='<option value="1">5</option><option value="1">6</option>';
    }
     </script>
     </head>
    <body>
        <select onchange="showOutboundDays(this.value);">
            <option value="1">January</option>
            <option value="2">February</option>
            <option value="3">March</option>
            <option value="4">April</option>
            <option value="5">May</option>
            <option value="6">June</option>
            <option value="7">July</option>
            <option value="8">August</option>
            <option value="9">September</option>
            <option value="10">October</option>
            <option value="11">November</option>
            <option value="12">December</option>
        </select>
        <br />
        <select id="day">
        </select>
    </body>
    </html>