15

I've seen plenty of questions and answers on SO and elsewhere that talk about right click events and how to catch and handle them with JavaScript, generally using the .button attribute of the event object generated by the browser.

However, the one thing I haven't found, probably because it's a pretty weird request, is how to catch and handle right clicks on an HTML <button /> element. Buttons are not handled the same way by the browser as other elements. Most importantly, it seems that a right click on a button doesn't do anything. No context menu and, from what I can tell, no event.

Am I wrong? I hope so, because it will make my life easier. If not, I can simulate a button with a div and some CSS, but I'd rather avoid it. Any thoughts?

(PS: This is for a silly side project, so don't worry about me trying to put a button-right-click-based interface in front of any customers or anything. I'm well aware of how horrible that interface would probably be.)

4
  • Possible duplicate: stackoverflow.com/questions/2405771/… Commented Jul 25, 2013 at 13:16
  • "I can* simulate a button with a div" Commented Jul 25, 2013 at 13:16
  • The contextmenu event fires for me on Chrome, Firefox, Opera (all on Linux) and on IE10 on Windows 7: jsbin.com/oduhak/1 Don't have earlier handy IEs to check (too many VMs running already). Commented Jul 25, 2013 at 13:17
  • @DevlshOne not a duplicate. As I mentioned in the first sentence of my post, while I've seen that post and others like it, it doesn't seem to apply for buttons. Though I'll check on the contextmenu event as TJCrowder suggested Commented Jul 25, 2013 at 13:26

4 Answers 4

13

http://jsfiddle.net/jqYN5/ is this what you are looking for? Adding context-menu:

<input type="button" value="click me" id="btn">
<button id="btn2">right click</button>`
document.getElementById('btn').onclick = function() {
  alert('click!')
}

document.getElementById('btn2').oncontextmenu = function() {
  alert('right click!')
}
Sign up to request clarification or add additional context in comments.

1 Comment

That's definitely another way to go about it. Thanks!
12

Sure, just add a onmousedown listener, check which mouse was pressed:

JS:

document.getElementById("test").onmousedown = function(event) {
    if (event.which == 3) {
        alert("right clicked!");
    }
}

HTML:

<button id="test">Test</button>

Demo: http://jsfiddle.net/Jmmqz/

3 Comments

@IanClark It does in the latest version: 22.0
I'm going to use onmouseup instead, but thanks! I forgot about these guys. It's really weird that these events are generated but not an onclick event.
@KenB -- All good, first time writing something like this, happy it worked!
3

Or, with perhaps a bit more beginner level understanding:

<script type="text/javascript">
function mouseclick(ele, e) {
if (e.type == 'click') {
    alert('Left Click Detected!');
}
    if (e.type == 'contextmenu') {
    alert('Right Click Detected!');
}
}
</script>

<a href="/" 
onclick="mouseclick(this, event)" 
oncontextmenu="mouseclick(this, event)" >link name</a>

Comments

0

You can make use of "context Menu" also :

document.getElementById('btn2').oncontextmenu = function() {
 alert('right click!')
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.