我有一个带有以下代码的Javascript函数。
function NodeClickActions(sender, eventArgs) {
event.preventDefault();
//Get whether user clicked CTRL key or not
var bCtrlPressed = eventArgs.get_browserEvent().ctrlKey;
//URL of the actions page
var URL = "../Actions.aspx";
//If CTRL key was pressed
if (bCtrlPressed) {
parent.MainPage.location.href = URL + "?PackageId=00000000-0000-0000-0000-000000000000&All=" + bCtrlPressed;
}
else {
parent.MainPage.location.href = URL;
}
}
我需要停止在新标签页中打开页面。请注意,event.PreventDefault();不幸的是不会成功。
我了解这是由于浏览器行为而不是代码引起的。 任何建议都欢迎。问候!
答案 0 :(得分:1)
这是最简单的方法,防止点击url比防止按下CTRL / CMD按钮要聪明得多,因为CTRL / CMD + CLICK之类的功能是浏览器功能,不能被覆盖(或者至少我没有这么做)取得成功)...
$(document).ready(function(){
$("a").click(function(e){
e.preventDefault();
window.location.href = $(this).attr("href");
});
});
根据您要使用的情况,您需要为表单提交应用类似的内容...,因为这也受此浏览器功能的影响
重要:使用Command + Click的OS X用户,请永远不要忘记
添加: 因为您要在绑定“单击”下禁用在新选项卡/窗口功能中打开,所以只需为contextmenu(鼠标右键)设置preventDefaults
$("a").contextmenu(function(e){
e.preventDefault();
});
答案 1 :(得分:0)
检测是否按下ctrl键。使用Jquery轻松进行事件处理
var ctrl=false;
$(document).on('keydown',function(e){
console.log(e.ctrlKey)
}).on('click','a[href]',function(e){
if(!ctrl){
e.preventDefault();
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="this?one">one</a>
答案 2 :(得分:0)
您需要直接在锚标记上添加侦听器,而不是使用事件委托并在父元素上添加侦听器。工作示例here。
HTML
<a href="https://gmail.com">Click Me</a>
JS:
$(document).ready(function ()
{
$("a").on('click',function(event)
{debugger;
event = event || window.event;
event.preventDefault();
event.stopPropagation();
return false;
});
});