Javascript在Firefox上工作但在Chrome和IE6中没有

时间:2010-09-09 10:56:07

标签: javascript internet-explorer firefox getelementbyid

我在Firefox 3.x.x中运行正常的javascript,但它在IE *,Chrome,Safari中无效。调用函数前的简单警报工作。这是代码

function showDiv(div){
 //alert(div);
 document.getElementById(div).style.visibility='visible';
 document.getElementById(div).style.height='auto';
 document.getElementById(div).style.display='block';}
function hideDiv(div){
 //alert(div);
 document.getElementById(div).style.visibility='hidden';
 document.getElementById(div).style.height='0px';
 document.getElementById(div).style.display='none';
}

这是html页面代码

<td align="center"><a onclick="showDiv('<?=$val['keyname']?>')" style="cursor:pointer;">Edit</a></td>

如果我将alert()放在showDiv('<?=$val['keyname']?>')之前,则显示警告框,但除了火狐之外的其他浏览器中未调用该功能

请告诉我解决方案。

3 个答案:

答案 0 :(得分:3)

语法对我来说没问题。

确保文档中没有多个具有相同ID的元素,并且元素ID有效。

答案 1 :(得分:2)

您发布的代码中没有任何内在错误。我建议您发布一个可重现的非工作示例:问题将出现在页面的其他位置。也许div ID字符串不是唯一的(这是无效的HTML并且会使行为不可靠);也许有一些其他脚本干扰,也许你有事件代码触发这不是以跨浏览器方式编写

然而,你试图以三种不同的方式隐藏元素似乎对我来说太过分了。只需一次display更改即可。

另一种方法是设置className='hidden''',并使用CSS规则将该类映射到display: none。这样做的好处是您不必知道相关元素是<div>(应该还原为display: block),还是<span>(应该还原为{{} 1}})或其他东西。 (与表相关的元素存在特殊问题。)

答案 2 :(得分:1)

也许你可以试试:

function showDiv(div) {
    var obj = document.getElementById(div);
    if (obj) {
        obj.style.display = "block";
        obj.style.height = "auto";
    } else {
       alert("DIV with id " + div + " not found. Can't show it.");
    }
}

function hideDiv(div) {
    var obj = document.getElementById(div);
    if (obj) {
        obj.style.display = "none";
    } else {
       alert("DIV with id " + div + " not found. Can't hide it.");
    }
}

不要在同一个函数中多次调用document.getElementById,使用变量来存储div元素。

if (obj)测试只会执行document.getElementById(...)找到的代码。