为什么“在新标签页中打开”发送GET请求?

时间:2016-11-21 13:12:55

标签: javascript html web request

我有以下HTML标记

<a href="#" id="navBar_navBarInput_3_subNavDropdownInput_0_subNavLinkInput_0" onclick="redirectPost(4,'EntryData.aspx');">My Link</a>

Javascript“redirectPost”

function redirectPost(id, url) {
            post(url, { id: id });
        }

function post(path, params, method) {
            method = method || "post";
            var form = document.createElement("form");
            form.setAttribute("method", method);
            form.setAttribute("action", path);

            for (var key in params) {
                if (params.hasOwnProperty(key)) {
                    var hiddenField = document.createElement("input");
                    hiddenField.setAttribute("type", "hidden");
                    hiddenField.setAttribute("name", key);
                    hiddenField.setAttribute("value", params[key]);

                    form.appendChild(hiddenField);
                }
            }

            document.body.appendChild(form);
            form.submit();
        }

这是交易:当我点击链接时,页面会发送一个常规的POST请求。但每当我使用“在新选项卡中打开”选项时,它会发送一个GET请求,这对我来说是一个问题,因为我做了一些验证背景。

有没有人知道它为什么会这样?

谢谢!

2 个答案:

答案 0 :(得分:1)

因为点击链接会激活点击处理程序;右键单击它并选择“在新选项卡中打开”不会,它只是读取href并使用它来打开一个新选项卡。

在某些浏览器上,您可以通过挂钩contextmenu事件并阻止其默认操作来覆盖上下文菜单。但这并不适用于所有浏览器。

从根本上说,如果您的链接不是真正的链接而是按钮,则应该是button(或input type="button"),而不是a。您可以根据自己的需要设计样式。使用正确的元素将有助于浏览器为该元素的用户提供正确的选项。

答案 1 :(得分:1)

  1. 您无法在新标签页中打开javascript。

  2. 您可以使用onclick="return redirectPost...."并将return false添加到您的函数末尾或event.preventdefault()添加到开头,但仍然不允许您使用鼠标右键打开在新标签页

  3. 但只需将您的链接更改为提交按钮,并像往常一样提交表单,并在onsubmit中设置隐藏字段