在Safari中,getElementById返回null或未定义

4
下面是一个代码片段,我正在尝试使用javascript中的DOM遍历一些帧。我可以在FF和IE中使用document.getElementById('raiseConfirm').click(),但在Safari中无法工作。我尝试了各种不同的方法来尝试到达具有ID raiseConfirm 的锚点。在这种情况下,document.getElementById()似乎找不到该框架中的任何元素。我已经尝试过window.documentself.documentcontentWindowcontentDocument,我已经尝试像这样命名框架:window.frames['gvdd'].document,当我测试它时,文档是一个对象,并且其中有东西,但是只要我尝试在其上使用函数getElementById(),它就会返回undefinednull
有人可以指出正确的解决方案吗?
  <form method="POST" 
        action="somescript.asp?CMD=POST&​TODO=TRUE2" 
        id="FORMSV2DISPLAY"
        name="FORMSV2DISPLAY"><a id="raiseConfirm" href="#divConfirm" class="nyroModal">HERE IT IS​</a> 
    <div id="divConfirm" style="display:none;​">​…​</div>

2
你确定帧已在脚本运行时加载完成(即你的代码位于“load”处理程序中)吗? - Frédéric Hamidi
这并没有描述你的框架结构,因此需要进一步了解才能回答问题。 - Diodeus - James MacFarlane
4个回答

1

在Safari浏览器中,document.getElementById()无法正常工作。相反,您需要使用document.all... 因此,JQuery应运而生,它受到所有浏览器的支持。这可能是JavaScript和JQuery之间要使用的主要区别。


1

我之前试图说过这个,但是它发布得很奇怪。我使用了JQuery解决了这个问题,这就是我所做的。

      $("#raiseConfirm").trigger("click");

1
你可以使用jQuery:
$('#raiseConfirm')

它肯定可以在所有浏览器上运行。 这就是jQuery的魔力 :)

如果你想要附加到点击事件:

$(document).ready(function () {
    $("#raiseConfirm").click(doSomenthing);
});

var doSomenthing = function () {
    /* Something I do here */
}

这与 document.getElementById("raiseConfirm") 完全等效,所以恐怕它无法解决提问者的问题... - Frédéric Hamidi
一般来说,是的,这是正确的,但从我的经验来看,jQuery非常出色。 - arpad
@Parv,真的吗?你的评论让我很感兴趣,你能详细说明一下区别吗? - Frédéric Hamidi
@Parv,不幸的是,我检查了jQuery的源代码,对于Safari没有解决方法。有一个针对Blackberry的方法,以及一个针对IE和Opera的方法(可以按名称而非ID返回元素),但getElementById()在所有其他情况下均按原样调用。 - Frédéric Hamidi
我自己解决了这个问题。这是我所做的。 - user1417467
document.getElementById()完全等效或不等效,将其更改为jQuery选择器解决了我的问题。还有,什么样的浏览器不支持这样基本的JavaScript函数? - Stack Underflow

0

$("#raiseConfirm").trigger("click"); - user1417467

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接