如何从onclick div属性中检测Javascript中的控件+单击?

Bro*_*iLD 43 javascript jquery

我需要知道用户是否正在点击或控制点击div元素..我已经看到了如何使用事件监听器进行的示例..但我的代码已经设置到位,并且正在使用on-element onclick方法. .

HTML

 <div id='1' onclick='selectMe()'>blah</div>
Run Code Online (Sandbox Code Playgroud)

JS

 function selectMe(){
         //determine if this is a single click, or a cntrol click 
    }
Run Code Online (Sandbox Code Playgroud)

...也很想知道它是鼠标左键还是右键.

Bjö*_*erg 73

在处理程序中,检查window.event属性对象ctrlKey:

function selectMe(){
    if (window.event.ctrlKey) {
        //ctrl was held down during the click
    }
}
Run Code Online (Sandbox Code Playgroud)

更新: 上面的解决方案取决于窗口对象上的专有属性,也许不应该指望它存在于所有浏览器中.幸运的是,我们现在有一份工作草案可以满足我们的需求,据MDN称,它得到了广泛的支持.例:

HTML

<span onclick="handler(event)">Click me</span>
Run Code Online (Sandbox Code Playgroud)

JS

function handler(ev) {
  console.log('CTRL pressed during click:', ev.ctrlKey);
}
Run Code Online (Sandbox Code Playgroud)

这同样适用于键盘事件

另请参见 KeyboardEvent.getModifierState()

  • 显然,`window.event`是IE专有的https://developer.mozilla.org/en-US/docs/Web/API/Window/event,但有一份工作草案https://developer.mozilla.org/似乎被广泛支持的en-US/docs/Web/API/MouseEvent/ctrlKey,这似乎是一个更好的API,因为该属性附加到发送给处理程序的事件. (2认同)
  • 仅需注意:这对于PC来说效果很好;在Mac上,对于许多应用程序,您可能需要测试window.event.metaKey,它告诉您是否已按下Command键。 (2认同)

Mas*_*ram 44

我建议在文档上使用JQuery的keyup和keydown方法,因为它规范了事件代码,使一个解决方案成为crossbrowser.

对于右键单击,您可以使用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;
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

  • 代码应该看起来更像我想:```$(document).keydown(($ event)=> {if($ event.which === 17){this.ctrlIsPressed = true;}}); $(document).keyup(($ event)=> {if($ event.which === 17){this.ctrlIsPressed = false;}});``` (4认同)
  • 现在有更好的方法可以做到这一点,请参阅[此答案](http://stackoverflow.com/a/16190632/542251) (2认同)

小智 24

因为这个问题首次提出已经有好几年了,所以其他答案已经过时或不完整.

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

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

至于检测右键单击,这是由另一个用户正确提供的,但我会在这里列出它只是为了让所有东西都放在一个地方.

$( 'div#1' ).on( 'contextmenu', function( event ) {
    // right-click handler
} ) ;
Run Code Online (Sandbox Code Playgroud)


Kra*_*ala 13

当鼠标点击时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
  }
}
Run Code Online (Sandbox Code Playgroud)

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


Fer*_*ÇER 5

试试这个代码,

$('#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');
   }
});
Run Code Online (Sandbox Code Playgroud)

抱歉,我添加了e.ctrlKey