0

我的 javascript 在 Firefox 3.xx 中运行良好,但在 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']?>')则会显示警报框,但该功能不会在除火狐之外的其他浏览器中调用

请告诉我解决方案。

4

3 回答 3

3

语法对我来说看起来不错。

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

于 2010-09-09T11:00:24.980 回答
2

您发布的代码本质上没有任何错误。我建议您发布一个可复制的非工作示例:问题将在页面的其他地方。也许divID 字符串不是唯一的(这是无效的 HTML,会使行为不可靠);也许有其他脚本干扰,也许你有事件代码触发这个不是以跨浏览器方式编写的

然而,你试图以三种不同的方式隐藏一个元素对我来说似乎有点矫枉过正。只需进行一次display更改就可以了。

另一种方法是设置className='hidden'or '',并使用 CSS 规则将该类映射到display: none. 这样做的好处是您不必知道所讨论的元素是 a <div>(应该恢复为display: block)、a <span>(应该恢复为display: inline)还是其他东西。(与表格相关的元素有特殊的问题。)

于 2010-09-09T11:04:19.277 回答
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(...).

于 2010-09-09T11:01:39.747 回答