我在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']?>')
之前,则显示警告框,但除了火狐之外的其他浏览器中未调用该功能
请告诉我解决方案。
答案 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(...)
找到的代码。