JavaScript在Firefox中工作,但不在Chrome和IE6中

问题描述:

我的JavaScript在Firefox 3.x.x中工作正常,但在IE *,Chrome,Safari中无法正常工作。调用函数之前的简单警报工作。下面是代码JavaScript在Firefox中工作,但不在Chrome和IE6中

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']?>')则警告框出现,但功能并不比火狐狸等其他浏览器称为

请告诉我这个解决方案。

+1

您可能会在错误控制台中收到错误。请始终包含这些内容,或说明没有内容。 – 2010-09-09 10:58:54

+1

你能告诉我更多关于不工作的含义吗?这是一个JavaScript错误,这些功能都没有做什么?请详细说明不工作的部分。 – Zoidberg 2010-09-09 10:59:40

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

写不过你尝试隐藏三种不同方式的元素似乎有点小题大做了我。只需一个display更改就可以。

另一种方法是设置className='hidden''',并使用CSS规则将该类映射到display: none。这样做的好处是,你不必知道有问题的元素是否是<div>(即应恢复display: block),一个<span>(即应恢复display: inline)或别的东西。 (与表格相关的元素有特定的问题。)

+0

+1更优雅的解决方案 – 2010-09-09 11:10:07

语法对我来说看起来没问题。

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

+1

好点!同时确保案件正确。由于某些浏览器区分大小写(涉及到ID),有些则不是。 – Zoidberg 2010-09-09 11:01:56

+0

是的,我确定在一个页面中没有多个具有相同名称的元素。所有元素都有不同的id。 – 2010-09-09 11:31:24

也许你可以试试:

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元素。如果已经发现通过document.getElementById(...)

if (obj)测试将只执行代码。

+0

这应该也无关紧要,显示:没有任何行为与可见性不同,因为display没有将dom元素带出布局流程,而隐藏的可见性只是使其不可见。 – Zoidberg 2010-09-09 11:03:09

+0

@Zoidberg对不起,我的回复张贴得太快了,它不是我想要建议的唯一东西... – romaintaz 2010-09-09 11:07:02

+1

我同意这个答案 - 如果你设置显示:块/无,应该是你需要的一切做;您不需要触摸可见度或高度即可使框出现并消失。 – Spudley 2010-09-09 11:09:21