我有以下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请求,这对我来说是一个问题,因为我做了一些验证背景。
有没有人知道它为什么会这样?
谢谢!
答案 0 :(得分:1)
因为点击链接会激活点击处理程序;右键单击它并选择“在新选项卡中打开”不会,它只是读取href
并使用它来打开一个新选项卡。
在某些浏览器上,您可以通过挂钩contextmenu
事件并阻止其默认操作来覆盖上下文菜单。但这并不适用于所有浏览器。
从根本上说,如果您的链接不是真正的链接而是按钮,则应该是button
(或input type="button"
),而不是a
。您可以根据自己的需要设计样式。使用正确的元素将有助于浏览器为该元素的用户提供正确的选项。
答案 1 :(得分:1)
您无法在新标签页中打开javascript。
您可以使用onclick="return redirectPost...."
并将return false
添加到您的函数末尾或event.preventdefault()
添加到开头,但仍然不允许您使用鼠标右键打开在新标签页
但只需将您的链接更改为提交按钮,并像往常一样提交表单,并在onsubmit中设置隐藏字段