在我的HTML页面中,我有2个选择菜单ID为“月”和“日” - 页面加载时“日”为空,“月”有12个选项,值1-12对应于1月 - 12月。< / p>
“month”有一个调用此函数的onchange事件:
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
}
(想象一下,选项标签周围有大括号可以帮助你看......)
我认为很清楚我正在努力实现的目标......除了ID“day”的内部HTML之外,一切都运行正常,无论你选择哪个月,都不会被填满。我知道问题出在函数的这个阶段,因为当我将if,elseif和else代码更改为警报或类似的东西时,它工作正常。
有人知道innerHTML的问题是什么吗?
由于
编辑:使用Firefox 3.6
答案 0 :(得分:13)
我建议不要在
select
上使用innerHTML - 它只是 似乎错了。select
元素具有易于使用的方法来添加新元素 选项:`document.getElementById('day').options.add(new Option("1", "1"))`
上述对象创建中的参数是:
new Option("optionText", "optionValue")
只是想添加到这个答案,因为它可能会澄清到这个帖子的人。
答案 1 :(得分:5)
这是IE的已知问题。
KB文章及解决方法: http://support.microsoft.com/kb/276228
另外:欺骗: innerHTML replace does not reflect
编辑:以下是基于您的代码的工作示例:
<!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>
答案 2 :(得分:5)
您不应该使用innerHTML
来修改代码。您应该使用removeChild(element);
和appendChild(element);
首先,您可以在变量中设置选择框以进行易读性和编辑;
var select = document.getElementById('days');
然后清除选择框
while ( select.childNodes.length >= 1 )
{
select.removeChild(select.firstChild);
}
最后,您使用适当的值
再次填充它for(var i=1;i<=days;i++)
{
newOption = document.createElement('option');
newOption.value=i;
newOption.text=i;
select.appendChild(newOption);
}
最后,您的代码和我的代码在这里得到以下内容:
function showOutboundDays(month, year)
{
var days=null;
if(month==4 || month==6 || month==9 || month==11)
days=30;
else if(month==2)
{
//Do not forget leap years!!!
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) //Provided by Justin Gregoire
{
days=29;
}
else
{
days=28;
}
}
else
days=31;
var select = document.getElementById('days');
while ( select.childNodes.length >= 1 )
{
select.removeChild(select.firstChild);
}
for(var i=1;i<=days;i++)
{
newOption = document.createElement('option');
newOption.value=i;
newOption.text=i;
select.appendChild(newOption);
}
}
现在包括闰年!
答案 3 :(得分:1)
这有点像黑客,但它很小,可以在FF和IE中工作,作为IE无法在选择元素上更改innerHTML的解决方法。
function swapInnerHTML(objID,newHTML) {
var el=document.getElementById(objID);
el.outerHTML=el.outerHTML.replace(el.innerHTML+'</select>',newHTML+'</select>');
}
答案 4 :(得分:1)
另一个解决方案是使用Jquery
$('#day').html('<option value="1">1</option><option value="2">2</option>');
答案 5 :(得分:0)
我提出了这个问题并想分享我的问题/答案,希望它可以帮助别人。
我有这个不起作用:
function change_select() {
var sel = document.getElementById('my-id').innerHTML;
sel = '<option>new item</option>';
}
我将其更改为可以正常工作的内容:
function change_select() {
var sel = document.getElementById('my-id');
sel.innerHTML = 'option>new item</option>';
}
答案 6 :(得分:0)
我会概括和总结如下问题和解决方案对我有用:
问题:
Javascript innerHTML不再适用于选择HTML元素。
说明
用于动态分配HTML内容(document.getElementById().innerHTML=...
)的标准Javascript语法在选择 HTML元素上不再起作用,因为操作系统或大多数操作系统的未知版本(可能全部)二手浏览器;在select元素上使用它会导致浏览器崩溃。
解决方案:
将HTML内容动态分配给HTML 选择元素,而不是使用标准语法:
document.getElementById(HTML_select_element_id).innerHTML = <HTML contents to assign>
使用以下语法:
var select = document.getElementById(HTML_select_element_id);
select.outerHTML =
select.outerHTML.replace(
select.innerHTML
,
<HTML contents to assign>
)
;
答案 7 :(得分:-1)
这个怎么样:
<div style="display:inline" id=A><select>...</select></div A>
<script>
obj = document.getElementById("A");
newSel = "<select><option>New 1</select>";
obj.innerHTML = newSel;
</script>