如何从 onclick div 属性检测 Javascript 中的 control+click?

IT技术 javascript jquery
2021-01-18 19:27:51

我需要知道,如果用户点击或控制单击div元素..我已经看到了如何使用事件侦听器来做到这一点的例子..但我的代码已经到位设置,并使用上元素的onclick方法。 .

HTML

 <div id='1' onclick='selectMe()'>blah</div>

JS

 function selectMe(){
         //determine if this is a single click, or a cntrol click 
    }

...也很想知道这是鼠标左键单击还是右键单击。

6个回答

在您的处理程序中,检查window.event该属性对象,ctrlKey如下所示:

function selectMe(){
    if (window.event.ctrlKey) {
        //ctrl was held down during the click
    }
}

更新: 上述解决方案依赖于window 对象专有属性,这可能不应该被指望在所有浏览器中都存在。幸运的是,我们现在有一个可以满足我们需求工作草案,并且根据 MDN,它得到了广泛的支持例子:

HTML

<span onclick="handler(event)">Click me</span>

JS

function handler(ev) {
  console.log('CTRL pressed during click:', ev.ctrlKey);
}

这同样适用于键盘事件

另请参见 KeyboardEvent.getModifierState()

显然,window.event是 IE developer.mozilla.org/en-US/docs/Web/API/Window/event专有的,但有一个工作草案developer.mozilla.org/en-US/docs/Web/API/MouseEvent/ctrlKey这似乎得到了广泛的支持,这似乎是一个更好的 API,因为该属性附加到发送到处理程序的事件上。
2021-03-25 19:27:51
请注意:这适用于 PC;在 Mac 上,对于许多应用程序,您可能想要测试 window.event.metaKey,它告诉您是否按下了 Command 键。
2021-04-05 19:27:51
也适用于 chrome,但确实不适用于 Firefox。嗯。:-/
2021-04-07 19:27:51

2021 年更新:现在有更好的方法来做到这一点。请务必查看其他答案

我建议在文档上使用 JQuery 的 keyup 和 keydown 方法,因为它规范了事件代码,以制作一个跨浏览器的解决方案。

对于右键单击,您可以使用 oncontextmenu,但要注意它在 IE8 中可能有问题。在此处查看兼容性图表:

http://www.quirksmode.org/dom/events/contextmenu.html

<p onclick="selectMe(1)" oncontextmenu="selectMe(2)">Click me</p>

$(document).keydown(function(event){
    if(event.which=="17")
        cntrlIsPressed = true;
});

$(document).keyup(function(){
    cntrlIsPressed = false;
});

var cntrlIsPressed = false;


function selectMe(mouseButton)
{
    if(cntrlIsPressed)
    {
        switch(mouseButton)
        {
            case 1:
                alert("Cntrl +  left click");
                break;
            case 2:
                alert("Cntrl + right click");
                break;
            default:
                break;
        }
    }


}
如果我按下 Crtl,然后松开它,然后单击链接怎么办!?它仍然认为我在按它
2021-03-24 19:27:51
最后,我可以对我的个人文件实施后门以示敬意 The Net: jsfiddle.net/4DdCs(我 92% 在开玩笑)
2021-04-03 19:27:51
我认为代码应该看起来更像这样: $(document).keydown(($event) => { if($event.which === 17) { this.ctrlIsPressed = true; } }); $(document).keyup(($event) => { if($event.which === 17) { this.ctrlIsPressed = false; } });
2021-04-04 19:27:51
现在有更好的方法可以做到这一点,请参阅此答案
2021-04-08 19:27:51
谢谢..这是有道理的..至少我不需要太多改变我现有的代码。
2021-04-11 19:27:51

因为自从第一次提出这个问题已经有几年了,其他答案已经过时或不完整。

这是使用 jQuery 的现代实现的代码:

$( 'div#1' ).on( 'click', function( event ) {
    if ( event.ctrlKey ) {
        //is ctrl + click
    } else {
        //normal click
    }
} );

至于检测右键单击,这是由另一位用户正确提供的,但我将在此处列出它只是为了将所有内容都放在一个地方。

$( 'div#1' ).on( 'contextmenu', function( event ) {
    // right-click handler
} ) ;
应该被接受的答案
2021-03-22 19:27:51
这是今天最好的答案。
2021-03-29 19:27:51
但如果我们需要在其他方法或事件处理程序中检查 ctrl 键,则无济于事
2021-04-08 19:27:51

当鼠标点击时ctrlKey是事件属性,可以作为 e.ctrlKey 访问。 Look down for example

$("xyz").click(function(e)){
  if(e.ctrlKey){
    //if ctrl key is pressed
  }
  else{
    // if ctrl key is not pressed
  }
}

注意:https : //www.w3schools.com/jsref/event_key_keycode.asp

完美的!请注意,这event.ctrlKey不是特定于 jQuery 的。您还可以在元素的 onclick-Attribute 中使用它:<button type="button" onclick="console.log(event.ctrlKey)">Click Me!</button>
2021-03-18 19:27:51

试试这个代码,

$('#1').on('mousedown',function(e) {
   if (e.button==0 && e.ctrlKey) {
       alert('is Left Click');
   } else if (e.button==2 && e.ctrlKey){
       alert('is Right Click');
   }
});

抱歉,我添加了e.ctrlKey

但是 ctrl 键在哪里
2021-03-15 19:27:51
Edadadan Chief aka Arun , Xinyang Li Ok 我添加了 Cntrl 键
2021-03-22 19:27:51
CTRL点击在哪里?
2021-04-01 19:27:51
这段代码很短而且很棒... !! :) 它对我来说比其他任何东西都更好!
2021-04-04 19:27:51