Javascript只能在firefox中工作

Javascript只能在firefox中工作,javascript,Javascript,谁能告诉我为什么这个javascript只在firefox中工作 function filter(obj, what, where) { var v = obj.value; var d = document.getElementById(where).getElementsByTagName('optgroup'); if (v > 0) { for (var i = 0; l = d.length, i < l; i++)

谁能告诉我为什么这个javascript只在firefox中工作

function filter(obj, what, where)
{
    var v = obj.value;
    var d = document.getElementById(where).getElementsByTagName('optgroup');

    if (v > 0)
    {
        for (var i = 0; l = d.length, i < l; i++)
        {
            d[i].className = 'hide';
            if (d[i].id == what + '_' + v)
                d[i].className = '';
        }
    }
    else
    {
        for (var i = 0; l = d.length, i < l; i++)
            d[i].className = '';
    }
}
功能过滤器(obj、何处、何处)
{
var v=目标值;
var d=document.getElementById(其中).getElementsByTagName('optgroup');
如果(v>0)
{
对于(变量i=0;l=d.length,i
我在opera、IE7和chrome上测试了它,但它不起作用!加载页面时,Opera错误控制台不会显示任何javascript错误

此javascript创建三级自动填充下拉框

我不知道是否有必要,但我也发布了HTML代码

State:
<select name="state" onchange="filter(this, 'state', 'district');">
    <option value="0"></option>
    <option value="1">State 1</option>
    <option value="2">State 2</option>
    <option value="3">State 3</option>
</select>

District:
<select name="district" id="district" onchange="filter(this, 'district', 'city');">
    <option value="0"></option>
    <optgroup id="state_1" label="State 1">
        <option value="1">District 1</option>
        <option value="2">District 2</option>
    </optgroup>
    <optgroup id="state_2" label="State 2">
        <option value="3">District 3</option>
    </optgroup>
    <optgroup id="state_3" label="State 3">
        <option value="4">District 4</option>
        <option value="5">District 5</option>
        <option value="6">District 6</option>
    </optgroup>
</select>

City:
<select name="city" id="city">
    <option value="0"></option>
    <optgroup id="district_1" label="District 1">
        <option value="1">City 1</option>
        <option value="2">City 2</option>
        <option value="3">City 3</option>
    </optgroup>
    <optgroup id="district_2" label="District 2">
        <option value="4">City 4</option>
        <option value="5">City 5</option>
    </optgroup>
    <optgroup id="district_3" label="District 3">
        <option value="6">City 6</option>
        <option value="7">City 7</option>
    </optgroup>
</select>
状态:
国家1
国家2
国家3
地区:
第一区
第2区
第三区
第四区
第五区
第6区
城市:
城市1
城市2
城市3
城市4
城市5
城市6
城市7

好的,我知道发生了什么。它起作用了。IE和其他浏览器可能不支持
上的许多css属性。我假设你有这样的东西:

optgroup.hide {display:none;}
以上内容在firefox中有效,但在IE中无效。我使用firebug lite查看IE是否确实将“hide”类应用于optgroup。然后我尝试将背景改为红色,而不是显示:无,它在IE中工作。我想你必须找到另一种隐藏optgroup的方法。可能会将其从“选择”中删除,然后再将其添加回

请参阅下面的示例代码

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
    .hide{background:red}
</style>
<script type="text/javascript">
function filterSelect(obj, what, elID)
    {
        alert(elID);
        var v = obj.value;
        var d = document.getElementById(elID).getElementsByTagName('optgroup');

        if (v > 0)
        {
            for (var i = 0; l = d.length, i < l; i++)
            {
                d[i].className = 'hide';
                if (d[i].id == what + '_' + v)
                    d[i].className = '';
            }
        }
        else
        {
            for (var i = 0; l = d.length, i < l; i++)
                d[i].className = '';
        }
    }

    </script>
</head>

<body>

State:
<select name="state" onchange="filterSelect(this, 'state', 'district');">
    <option value="0"></option>
    <option value="1">State 1</option>
    <option value="2">State 2</option>
    <option value="3">State 3</option>
</select>

District:
<select name="district" id="district" onchange="filterSelect(this, 'district', 'city');">
    <option value="0"></option>
    <optgroup id="state_1" label="State 1">
        <option value="1">District 1</option>
        <option value="2">District 2</option>
    </optgroup>
    <optgroup id="state_2" label="State 2">
        <option value="3">District 3</option>
    </optgroup>
    <optgroup id="state_3" label="State 3">
        <option value="4">District 4</option>
        <option value="5">District 5</option>
        <option value="6">District 6</option>
    </optgroup>
</select>

City:
<select name="city" id="city">
    <option value="0"></option>
    <optgroup id="district_1" label="District 1">
        <option value="1">City 1</option>
        <option value="2">City 2</option>
        <option value="3">City 3</option>
    </optgroup>
    <optgroup id="district_2" label="District 2">
        <option value="4">City 4</option>
        <option value="5">City 5</option>
    </optgroup>
    <optgroup id="district_3" label="District 3">
        <option value="6">City 6</option>
        <option value="7">City 7</option>
    </optgroup>
</select>

</body>
</html>

.hide{背景:红色}
功能过滤器选择(obj、what、elID)
{
警报(elID);
var v=目标值;
var d=document.getElementById(elID.getElementsByTagName('optgroup');
如果(v>0)
{
对于(变量i=0;l=d.length,i
好的,我知道发生了什么。它起作用了。IE和其他浏览器可能不支持
上的许多css属性。我假设你有这样的东西:

optgroup.hide {display:none;}
以上内容在firefox中有效,但在IE中无效。我使用firebug lite查看IE是否确实将“hide”类应用于optgroup。然后我尝试将背景改为红色,而不是显示:无,它在IE中工作。我想你必须找到另一种隐藏optgroup的方法。可能会将其从“选择”中删除,然后再将其添加回

请参阅下面的示例代码

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
    .hide{background:red}
</style>
<script type="text/javascript">
function filterSelect(obj, what, elID)
    {
        alert(elID);
        var v = obj.value;
        var d = document.getElementById(elID).getElementsByTagName('optgroup');

        if (v > 0)
        {
            for (var i = 0; l = d.length, i < l; i++)
            {
                d[i].className = 'hide';
                if (d[i].id == what + '_' + v)
                    d[i].className = '';
            }
        }
        else
        {
            for (var i = 0; l = d.length, i < l; i++)
                d[i].className = '';
        }
    }

    </script>
</head>

<body>

State:
<select name="state" onchange="filterSelect(this, 'state', 'district');">
    <option value="0"></option>
    <option value="1">State 1</option>
    <option value="2">State 2</option>
    <option value="3">State 3</option>
</select>

District:
<select name="district" id="district" onchange="filterSelect(this, 'district', 'city');">
    <option value="0"></option>
    <optgroup id="state_1" label="State 1">
        <option value="1">District 1</option>
        <option value="2">District 2</option>
    </optgroup>
    <optgroup id="state_2" label="State 2">
        <option value="3">District 3</option>
    </optgroup>
    <optgroup id="state_3" label="State 3">
        <option value="4">District 4</option>
        <option value="5">District 5</option>
        <option value="6">District 6</option>
    </optgroup>
</select>

City:
<select name="city" id="city">
    <option value="0"></option>
    <optgroup id="district_1" label="District 1">
        <option value="1">City 1</option>
        <option value="2">City 2</option>
        <option value="3">City 3</option>
    </optgroup>
    <optgroup id="district_2" label="District 2">
        <option value="4">City 4</option>
        <option value="5">City 5</option>
    </optgroup>
    <optgroup id="district_3" label="District 3">
        <option value="6">City 6</option>
        <option value="7">City 7</option>
    </optgroup>
</select>

</body>
</html>

.hide{背景:红色}
功能过滤器选择(obj、what、elID)
{
警报(elID);
var v=目标值;
var d=document.getElementById(elID.getElementsByTagName('optgroup');
如果(v>0)
{
对于(变量i=0;l=d.length,i
凭直觉,函数参数“where”可能是javascript关键字。试着改变一下吗?@Moin:不是。不要让语法荧光笔愚弄你。它试图以同样的方式突出显示所有内容,而“where”在其他一些语言中是一个关键字(如C#/LINQ和SQL)。是的,荧光笔让我看到了“where”是一个常见的关键字。我还是发现了问题。请看下面我的答案。凭直觉,函数参数“where”可能是一个javascript关键字。试着改变一下吗?@Moin:不是。不要让语法荧光笔愚弄你。它试图以同样的方式突出显示所有内容,而“where”在其他一些语言中是一个关键字(如C#/LINQ和SQL)。是的,荧光笔让我看到了“where”是一个常见的关键字。我还是发现了问题。见下面我的答案。