不能使用ctrl + click with preventDefault并返回false

时间:2014-02-19 10:19:27

标签: javascript jquery ajax

我正在加载AJAX中的每个页面,所以我在链接上使用return false将它们加载到ajax中。

问题:如果这些家伙想要在新窗口中打开它不能,ctrl + click也会激活ajax,我没有尝试过中键,因为我没有鼠标。

然后我尝试了e.preventDefault,它仍然阻止了这个家伙在另一个标签中打开它。

我知道如何绕过这个吗?

(如果您想尝试:www.p1x3L.com)

1 个答案:

答案 0 :(得分:4)

e.preventDefault()会阻止浏览器跟踪浏览器。

我想要做的只是在点击发生时检查 Ctrl (或Mac上的 cmd )的状态,然后处理行动。

您需要跟踪按键的动作。请考虑以下示例,该示例将布尔值分配给ctrlPressed

var ctrlPressed = false;

$(window).on('keydown', function(e) {  
    if (e.metaKey || e.ctrlKey)  ctrlPressed = true;
}).on('keyup', function(e) {
    if (e.metaKey || e.ctrlKey)  ctrlPressed = false;
});

现在在click处理程序中,您只需检查ctrlPressed的状态:

$('a').on('click', function(e) {  
    if(ctrlPressed)
    {
        return true;
    }

    // Handle your AJAX here. No need for an else{} block 
    // since return true will already have executed.
});