代码之家  ›  专栏  ›  技术社区  ›  Jarsen

javascript表单提交在webkit中有效,在其他地方失败

  •  0
  • Jarsen  · 技术社区  · 15 年前

    我编写此代码是为了尝试将一个URL作为post值发送到同一页。该代码在Chrome和Safari中非常有用…但是在ff3和ie中失败了(最后一个我不关心的,但我需要它在firefox中工作)。在FF3和IE中,它打开一个空白的新选项卡。对于WebKit和其他浏览器通过JavaScript处理表单提交的方式之间的区别,我应该知道什么?

    我使用的代码是:

    function posturl (url) {
            var myForm = document.createElement("form");
            myForm.method="post" ;
            var myInput = document.createElement("input") ;
            myInput.setAttribute("name", "url") ;
            myInput.setAttribute("value", url);
            myForm.appendChild(myInput);
            document.body.appendChild(myForm) ;
            myForm.submit();
            document.body.removeChild(myForm) ;
        }
    

    编辑:也许我应该补充一下,它的工作方式是,我在我的锚标记中使用脚本作为一个href。因此,当您单击链接时,它会将参数通过post传递到同一个页面,并相应地更新内容。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Crescent Fresh    15 年前

    它适用于我的火狐2,Chrome2。这是我的完整测试页:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <script>
        function posturl (url) {
            var myForm = document.createElement("form");
            myForm.method="post";
    
            var myInput = document.createElement("input") ;
            myInput.setAttribute("name", "url") ;
            myInput.setAttribute("value", 'http://www.google.com');
    
            myForm.appendChild(myInput);
            document.body.appendChild(myForm);
            myForm.submit();
            document.body.removeChild(myForm);
        }
        </script>
    </head>
    <body>
    <input type="button" value="posturl()" onclick="posturl()" />
    </body>
    

    必须有其他内容(可能与打开空白选项卡有关?WTF?)那是在破坏你的密码。

    Here's 为什么它在IE中不起作用。

        2
  •  0
  •   Bjorn    15 年前

    这应该适用于不同的浏览器,但实际上我认为您需要一个window.setTimeout,值为0。发生的事情是,在javascript有时间“呼吸”之前,您试图访问一个元素。

    尝试:

    window.setTimeout( function() { 
            myForm.submit();
            document.body.removeChild(myForm);
    }, 0 );