623 Stimmen

Wie man mit jQuery zwischen linkem und rechtem Mausklick unterscheidet

Wie erhalten Sie die angeklickte Maustaste mit jQuery?

$('div').bind('click', function(){
    alert('clicked');
});

Dies wird sowohl durch Rechts- als auch durch Linksklick ausgelöst. Wie kann man den rechten Mausklick abfangen? Ich würde glücklich sein, wenn etwas wie unten existiert:

$('div').bind('rightclick', function(){ 
    alert('right mouse button is pressed');
});

0 Stimmen

3voto

Gülsen Keskin Punkte 338
<!DOCTYPE html>
<html>
<head>
    <title>JS Mouse Events - Button Demo</title>
</head>
<body>
    <button id="btn">Click me with any mouse button: left, right, middle, ...</button>
    <p id="message"></p>
    <script>
        let btn = document.querySelector('#btn');

        // disable context menu when right-mouse clicked
        btn.addEventListener('contextmenu', (e) => {
            e.preventDefault();
        });

        // show the mouse event message
        btn.addEventListener('mouseup', (e) => {
            let msg = document.querySelector('#message');
            switch (e.button) {
                case 0:
                    msg.textContent = 'Left mouse button clicked.';
                    break;
                case 1:
                    msg.textContent = 'Middle mouse button clicked.';
                    break;
                case 2:
                    msg.textContent = 'Right mouse button clicked.';
                    break;
                default:
                    msg.textContent = `Unknown mouse button code: ${event.button}`;
            }
        });
    </script>
</body>
</html>

3voto

Gülsen Keskin Punkte 338

Können Sie diesen Code ausprobieren:

event.button

Rückgabewert: Eine Zahl, die angibt, welche Maustaste beim Auftreten des Mausereignisses gedrückt wurde.

Mögliche Werte:

  • 0 : Linke Maustaste
  • 1 : Radtaste oder mittlere Taste (falls vorhanden)
  • 2 : Rechte Maustaste

Hinweis: Internet Explorer 8 und früher hat andere Rückgabewerte:

  • 1 : Linke Maustaste
  • 2 : Rechte Maustaste
  • 4 : Radtaste oder mittlere Taste (falls vorhanden) Hinweis: Bei einer für die linke Hand konfigurierten Maus sind die Rückgabewerte vertauscht

3voto

Es gibt auch eine Möglichkeit, dies ohne JQuery zu tun!

Sehen Sie sich das an:

document.addEventListener("mousedown", function(evt) {
    switch(evt.buttons) {
      case 1: // left mouse
      case 2: // right mouse
      case 3: // middle mouse <- I didn't tested that, I just got a touchpad
    }
});

0 Stimmen

Mittlere Maus schien 4 auf meinem PC (Ubuntu 14.04 - FireFox). Ich glaube, links und rechts zusammen ist 3 und Mitte ist 4... Es muss eine bessere "Cross-Browser", "Cross-Plattform" Weg sein...

2voto

NinjaKC Punkte 781

Wenn Sie auf der Suche nach "Better Javascript Mouse Events" sind, die

  • linker Mousedown
  • mittleres Mousedown
  • rechter Mousedown
  • linke Maustaste
  • mittlerer Mausklick
  • rechte Maustaste
  • Linksklick
  • Mittelklick
  • Rechtsklick
  • Mausrad nach oben
  • Mausrad nach unten

Werfen Sie einen Blick auf dieses browserübergreifende normale Javascript, das die oben genannten Ereignisse auslöst und Ihnen die Kopfarbeit abnimmt. Kopieren Sie es einfach und fügen Sie es in den Kopf Ihres Skripts ein, oder fügen Sie es in eine Datei in der <head> Ihres Dokuments. Dann binden Sie Ihre Ereignisse, beziehen Sie sich auf den nächsten Code-Block unten, die ein Jquery-Beispiel für die Erfassung der Ereignisse und Abfeuern der Funktionen, die ihnen zugewiesen, obwohl dies funktioniert mit normalen Javascript Bindung als gut zeigt.

Wenn Sie daran interessiert sind, wie es funktioniert, schauen Sie sich das jsFiddle an: https://jsfiddle.net/BNefn/

/**
   Better Javascript Mouse Events
   Author: Casey Childers
**/
(function(){
    // use addEvent cross-browser shim: https://gist.github.com/dciccale/5394590/
    var addEvent = function(a,b,c){try{a.addEventListener(b,c,!1)}catch(d){a.attachEvent('on'+b,c)}};

    /* This function detects what mouse button was used, left, right, middle, or middle scroll either direction */
    function GetMouseButton(e) {
        e = window.event || e; // Normalize event variable

        var button = '';
        if (e.type == 'mousedown' || e.type == 'click' || e.type == 'contextmenu' || e.type == 'mouseup') {
            if (e.which == null) {
                button = (e.button < 2) ? "left" : ((e.button == 4) ? "middle" : "right");
            } else {
                button = (e.which < 2) ? "left" : ((e.which == 2) ? "middle" : "right");
            }
        } else {
            var direction = e.detail ? e.detail * (-120) : e.wheelDelta;
            switch (direction) {
                case 120:
                case 240:
                case 360:
                    button = "up";
                break;
                case -120:
                case -240:
                case -360:
                    button = "down";
                break;
            }
        }

        var type = e.type
        if(e.type == 'contextmenu') {type = "click";}
        if(e.type == 'DOMMouseScroll') {type = "mousewheel";}

        switch(button) {
            case 'contextmenu':
            case 'left':
            case 'middle':
            case 'up':
            case 'down':
            case 'right':
                if (document.createEvent) {
                  event = new Event(type+':'+button);
                  e.target.dispatchEvent(event);
                } else {
                  event = document.createEventObject();
                  e.target.fireEvent('on'+type+':'+button, event);
                }
            break;
        }
    }

    addEvent(window, 'mousedown', GetMouseButton);
    addEvent(window, 'mouseup', GetMouseButton);
    addEvent(window, 'click', GetMouseButton);
    addEvent(window, 'contextmenu', GetMouseButton);

    /* One of FireFox's browser versions doesn't recognize mousewheel, we account for that in this line */
    var MouseWheelEvent = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
    addEvent(window, MouseWheelEvent, GetMouseButton);
})();

Bessere Mausklick-Ereignisse Beispiel (verwendet jquery der Einfachheit halber, aber die oben wird Cross-Browser arbeiten und feuern die gleichen Ereignisnamen, IE verwendet auf vor den Namen)

<div id="Test"></div>
<script type="text/javascript">
    $('#Test').on('mouseup',function(e){$(this).append(e.type+'<br />');})
              .on('mouseup:left',function(e){$(this).append(e.type+'<br />');})
              .on('mouseup:middle',function(e){$(this).append(e.type+'<br />');})
              .on('mouseup:right',function(e){$(this).append(e.type+'<br />');})

              .on('click',function(e){$(this).append(e.type+'<br />');})
              .on('click:left',function(e){$(this).append(e.type+'<br />');})
              .on('click:middle',function(e){$(this).append(e.type+'<br />');})
              .on('click:right',function(e){$(this).append(e.type+'<br />');})

              .on('mousedown',function(e){$(this).html('').append(e.type+'<br />');})
              .on('mousedown:left',function(e){$(this).append(e.type+'<br />');})
              .on('mousedown:middle',function(e){$(this).append(e.type+'<br />');})
              .on('mousedown:right',function(e){$(this).append(e.type+'<br />');})

              .on('mousewheel',function(e){$(this).append(e.type+'<br />');})
              .on('mousewheel:up',function(e){$(this).append(e.type+'<br />');})
              .on('mousewheel:down',function(e){$(this).append(e.type+'<br />');})
              ;
</script>

Und für diejenigen, die die verkleinerte Version benötigen...

!function(){function e(e){e=window.event||e;var t="";if("mousedown"==e.type||"click"==e.type||"contextmenu"==e.type||"mouseup"==e.type)t=null==e.which?e.button<2?"left":4==e.button?"middle":"right":e.which<2?"left":2==e.which?"middle":"right";else{var n=e.detail?-120*e.detail:e.wheelDelta;switch(n){case 120:case 240:case 360:t="up";break;case-120:case-240:case-360:t="down"}}var c=e.type;switch("contextmenu"==e.type&&(c="click"),"DOMMouseScroll"==e.type&&(c="mousewheel"),t){case"contextmenu":case"left":case"middle":case"up":case"down":case"right":document.createEvent?(event=new Event(c+":"+t),e.target.dispatchEvent(event)):(event=document.createEventObject(),e.target.fireEvent("on"+c+":"+t,event))}}var t=function(e,t,n){try{e.addEventListener(t,n,!1)}catch(c){e.attachEvent("on"+t,n)}};t(window,"mousedown",e),t(window,"mouseup",e),t(window,"click",e),t(window,"contextmenu",e);var n=/Firefox/i.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel";t(window,n,e)}();

1voto

do loop Punkte 59

Ein alter Beitrag - aber ich dachte, ich würde ihn mit einer vollständigen Antwort an die Leute weitergeben obige Frage über alle Mausklick-Ereignistypen.

Fügen Sie dieses Skript hinzu, damit es für die gesamte Seite gilt:

var onMousedown = function (e) {
     if (e.which === 1) {/* Left Mouse Click */}
     else if (e.which === 2) {/* Middle Mouse Click */}
     else if (e.which === 3) {/* Right Mouse Click */}
};
clickArea.addEventListener("mousedown", onMousedown);

Hinweis: Stellen Sie sicher, dass Sie return false;' auf dem angeklickten Element - ist sehr wichtig.

Zum Wohl!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X