开发者

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

开发者 https://www.devze.com 2023-03-07 06:25 出处:网络
I have some code that uses a form.submit() to open up another window when you click something on my page.It works fine in IE 6-8, Firefox and Chrome, and Safari on Mac.But in Safari on Windows XP, aft

I have some code that uses a form.submit() to open up another window when you click something on my page. It works fine in IE 6-8, Firefox and Chrome, and Safari on Mac. But in Safari on Windows XP, after you click that something, none of the other links that do form.submit() work. Even the same something doesn't do it. Here's some of the callback code for that button:

accessEmployeeViewClicked = function() {
    var form=document.Form<xsl:value-of select="//PAGE/@NAME" />;

    form.action = 'ServletName';
    form.target = "otherTarget";
    form.submit();
};

The function is accessed by the following code:

<a href="#" onclick="accessEmployeeV开发者_开发百科iewClicked();return false;">Access employee's view &gt;&gt;</a>

I put a breakpoint in the Safari built-in debugger, and the second time you click it, it definitely gets into the accessEmployeeViewClicked() function, but the form.submit(); does nothing. As per the suggestion in the comments, I changed the form.target to "_blank" but that had no effect.

I've looked at these similar questions:

  • Firefox handles xxx.submit(), Safari doesn't ... what can be done?

  • document.form.submit(); won't submit in safari

and tried the suggestions, and they don't help.


It appears Apple must be aware of the problem, since it was logged in 2009 and supposedly went into their "radar" bug tracking system, but they must not care: https://bugs.webkit.org/show_bug.cgi?id=28633

I implemented the work-around from that bug report, and it worked:

        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();


Here is a simpler solution - will work on all browsers and give you an added value of a timestamp in your log file

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

If you have the function do the submit, the onsubmit is not triggered so instead add

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

精彩评论

暂无评论...
验证码 换一张
取 消