Jquery: detect if middle or right mouse button is clicked, if so, do this:
Asked Answered
R

3

14

Check out my jsfiddle demo, if e.which == 1 then when you left click the h2 it will e.which == 2 or e.which == 3 then it wont work. 2 is the middle mouse button, and 3 is the right mouse button. i found this too:

JQuery provides an e.which attribute, returning 1, 2, 3 for left, middle, and right click respectively. So you could also use if (e.which == 3) { alert("right click"); }

This code isn't working:

code:

    $("h2").live('click', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
      alert("middle button"); 
   }
});
Rothermere answered 24/10, 2010 at 8:0 Comment(0)
B
24

You may want to trap the mousedown event, and you also need to prevent the oncontextmenu event to stop the context menu from coming up during the right click event.

$("h2").live('mousedown', function(e) { 
   if( (e.which == 1) ) {
     alert("left button");
   }if( (e.which == 3) ) {
     alert("right button");
   }else if( (e.which == 2) ) {
      alert("middle button"); 
   }
   e.preventDefault();
}).live('contextmenu', function(e){
   e.preventDefault();
});

UPDATE: .live() has been deprecated since jQuery 1.9. Use .on() instead.

$("h2").on('mousedown', function(e) { 
  if (e.which == 1) {
    alert("left button");
  } else if (e.which == 3) {
    alert("right button");
  } else if (e.which == 2) {
    alert("middle button");
  }
  e.preventDefault();
});
Blamable answered 24/10, 2010 at 9:10 Comment(4)
Yeah, I found that contextmenu was a nice way to override the built-in menu. But maybe your first function could include it instead of tacking it on the end. I'm not sure why he's using live, but I would use .bind('mousedown contextmenu', function...Forearm
lol! @fudgey I also tot why he was using live when he can use window.ready and just attach it straight. but i tot he must have his reasons. But about the tacking, it wud make whatever code he puts in the if statement execute twice.Blamable
actually it's just a snippet of code i copied, so i have no clue why i'm using .live... haha, okay, so i'll work with what i have above, but did you think there was something better? and i'll use .bind('mousedown contextmenu', functionRothermere
if you use <code>.bind('mousedown contextmenu', function</code>, the code would be executed twice. if you can live with that then no problem. you are good to goBlamable
K
2

I've noticed some oddities in the past with using the click event for anything but a regular left-click. I don't recall the details, but if you change "click" to "mousedown" or "mouseup" you should have better results.

Koger answered 24/10, 2010 at 8:38 Comment(1)
You're right, click doesn't work but mousedown works to detect middle and right buttonsUnteach
P
1

Now button has been fouled up beyond all recognition. According to W3C its values should be:

  • Left button – 0
  • Middle button – 1
  • Right button – 2

According to Microsoft its values should be:

  • Left button – 1
  • Middle button – 4
  • Right button – 2

No doubt the Microsoft model is better than W3C’s. 0 should mean “no button pressed”, anything else is illogical.

From http://www.quirksmode.org/js/events_properties.html

Palaeogene answered 17/7, 2011 at 9:15 Comment(1)
jQuery normalizes the following properties for cross-browser consistency: … which. Better use which instead of button.Balbinder

© 2022 - 2024 — McMap. All rights reserved.