第二个form.submit()在XP上的Safari中不起作用,在其他浏览器上工作

Second form.submit() doesn't work in Safari on XP, works on other browsers

本文关键字:不起作用 其他 浏览器 工作 上的 submit form 第二个 XP Safari      更新时间:2023-09-26

我有一些代码,当你点击我页面上的某些内容时,它使用 form.submit() 打开另一个窗口。 它在IE 6-8,Firefox和Chrome以及Mac上的Safari中运行良好。 但是在Windows XP上的Safari中,单击该内容后,其他执行form.submit()的链接都不起作用。 即使是同样的东西也做不到。 下面是该按钮的一些回调代码:

accessEmployeeViewClicked = function() {
    var form=document.Form<xsl:value-of select="//PAGE/@NAME" />;
    form.action = 'ServletName';
    form.target = "otherTarget";
    form.submit();
};

该函数由以下代码访问:

<a href="#" onclick="accessEmployeeViewClicked();return false;">Access employee's view &gt;&gt;</a>

我在 Safari 内置调试器中放置了一个断点,第二次单击它时,它肯定会进入 accessEmployeeViewClicked() 函数,但form.submit();什么也不做。 根据评论中的建议,我将form.target更改为"_blank",但这没有任何效果。

我看过这些类似的问题:

  • Firefox 处理 xxx.submit(),Safari 不...能做什么?

  • document.form.submit(); 不会在 safari 中提交

并尝试了这些建议,但它们没有帮助。

看来苹果必须意识到这个问题,因为它是在2009年记录的,据说进入了他们的"雷达"错误跟踪系统,但他们一定不在乎:https://bugs.webkit.org/show_bug.cgi?id=28633

我实现了该错误报告中的解决方法,它起作用了:

        form.action = 'ServletName';
        // Work around for Safari bug suggested in https://bugs.webkit.org/show_bug.cgi?id=28633
        if ($.browser.safari)
        {
            form.action += '?t=' + new Date().getTime();
        }
        form.target = "otherTarget";
        form.submit();

这是一个更简单的解决方案 - 适用于所有浏览器,并在日志文件中为您提供时间戳的附加值

<form onsubmit="this.ts.value=new Date().getTime()">
.
.
.
<input type="hidden" name="ts" value="timestamp" />
</form>

如果你有函数执行提交,则不会触发onsubmit,所以

添加
form.target = "otherTarget";
form.ts.value=new Date().getTime()
form.submit();