在事件处理程序中检测Ctrl +单击

时间:2016-10-14 11:04:00

标签: javascript jquery google-chrome google-chrome-extension

我想用检测 Ctrl -click替换检测双击,但我不知道该怎么做。

$(document).ready(function () {
    $(document).dblclick(function (e) {
        var target = (e && e.target) || (event && event.srcElement);
        var tag = target.tagName.toLowerCase();
        if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {       
            openIfSelected("dblclick");
        }
    });
});

2 个答案:

答案 0 :(得分:1)

您正在寻找jQuery .click()方法和MouseEvent.ctrlKey属性。

您可以执行以下操作:

$(document).ready(function () {
    $(document).click(function (e) {
        if(e.ctrlKey){
            var tag = e.target.tagName.toLowerCase();
            if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {       
                openIfSelected("dblclick"); //Still pass "dblclick", but upon Ctrl-click
            }
        }
    });
});

function openIfSelected(reason){
    //This is now only called upon Ctrl-click, but the "reason" remains "dblclick".
    console.log('Called "openIfSelected" with reason: ' + reason);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><kbd>Ctrl</kbd>-Click me</div>

注意:
您使用了代码:

var target = (e && e.target) || (event && event.srcElement);

这写得很奇怪。您可能正在尝试使用window.event。但是,这不是必需的,因为您正在使用jQuery, which normalizes the event object that is passed to event handlers,因此您不必执行此类操作。此外,您使用的代码会将此问题声明为Google Chrome扩展程序问题。如果是这种情况,并且您没有使用jQuery,那么您仍然不需要这样做,因为您不需要考虑在旧浏览器(例如IE)中使用代码。

答案 1 :(得分:0)

我这样修好了。非常感谢Makyen。

$(document).ready(function () {
    $(document).click(function (e) {
        if(event.ctrlKey){
            var target = event.srcElement;
            var tag = target.tagName.toLowerCase();
            if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {
                openIfSelected("dblclick");
            }
        }
    });
});