ottogal: jQuery-Frage

Hallo in die Runde,
wenn bei gedrückter Strg-Taste auf einen Link geklickt wird, soll dessen title-Attribut ermittelt werden.
Ich weiß nicht, wie ich das click-Event und das keydown-Event zusammenkriege.
Wer hilft mir drauf?
Dank und Gruß
ottogal

  1. Hi,

    ich würde es wie folgt lösen:
    Bei keydown überprüfen ob es die Strg-Taste war, wenn ja eine Variable auf true setzen.
    Bei Klick auf einen entsprechenden Link prüfen ob die Variable gesetzt ist, falls ja irgendwas machen.
    Bei keyup überprüfen ob es die Strg-Taste war, wenn ja die Variable auf false setzen.

    ~dave

    1. Danke dave, ich werde es ausprobieren.

  2. Hallo,

    wenn bei gedrückter Strg-Taste auf einen Link geklickt wird, soll dessen title-Attribut ermittelt werden.

    Verwende die metaKey-Eigenschaft des click-Events.

    Allgemein würde ich auf solche komplizierten Sachen verzichten. Arbeite mit einem normalen Linksklick und ggf. einem Rechtsklick (Kontextmenü/oncontextmenu), aber nicht mit Klick plus Tastenkombination. Das ist ungewohnt.

    Mathias

    1. Vielen Dank, Mathias.

      Verwende die metaKey-Eigenschaft des click-Events.

      Die kannte ich nicht. Im verlinkten API finde ich auch nicht viel dazu. Google zeigt mir, dass metaKey die PC/Mac-Unterschiede abfängt, aber ich fand auch (zugegeben ältere) Diskussionen, dass das nicht ganz so klappt. Ich versuchs aber mal.

      Allgemein würde ich auf solche komplizierten Sachen verzichten. Arbeite mit einem normalen Linksklick und ggf. einem Rechtsklick (Kontextmenü/oncontextmenu), aber nicht mit Klick plus Tastenkombination. Das ist ungewohnt.

      Ich bin auch nur drauf gekommen, weil ich vorher kein Event für den Rechtsklick gefunden hatte. Ginge es so?

      $('.foo').bind('contextmenu', function(e) {  
           e.preventDefault;  
           // do what I want  
      });
      
      1. Sehe grade, dass trotz des e.preventDefault; das browser-eigene Kontextmenü aufgeht.

        1. Ich habe es nun so gelöst:

          $('a.foo').mousedown(function(e){  
              if( e.button == 2 ) {  
                  // do what I want  
                  return false;  
              };  
          return true;  
          });
          

          Gibt es Bedenken?

          1. Ich habe es nun so gelöst:

            $('a.foo').mousedown(function(e){

            if( e.button == 2 ) {
                    // do what I want
                    return false;
                };
            return true;
            });

            
            >   
            > Gibt es Bedenken?  
              
            Was soll der Code tun? Bloß das Kontextmenü unterdrücken oder fehlt da noch der Code, der die eigentliche Aufgabe erledigen soll?  
              
            Gegen das bloße Unterrücken gibt es viele Bedenken, die erst jüngst [in diesem Thread diskutiert](https://forum.selfhtml.org/?t=207470&m=1409912) wurden.  
              
            Dem Thema widmen sich auch die FAQ von SELFHTML:  
            <http://de.selfhtml.org/navigation/faq.htm#rechte_maustaste>  
            <http://de.selfhtml.org/navigation/anzeige/rechte_maustaste.htm>  
              
            Wenn du das Kontextmenü z.B. durch ein eigenes ersetzen oder das vorhandene ergänzen willst, so gibt es verschiedene Techniken. Entweder mit JavaScript das contextmenu-Ereignis abfangen, ggf. zusätzlich Rechtsklicks, und ein Element an der Mausposition einblenden. Oder mit HTML5 menu-Elementen und contextmenu-Attributen, die unterstützt allerdings derzeit [nur Firefox 8](https://developer.mozilla.org/en/Firefox_8_for_developers).  
              
            Mathias
            
        2. Sehe grade, dass trotz des e.preventDefault; das browser-eigene Kontextmenü aufgeht.

          Kommt auf den Browser an :)

          1. Sehe grade, dass trotz des e.preventDefault; das browser-eigene Kontextmenü aufgeht.

            Kommt auf den Browser an :)

            Bei mir wars der Firefox 7.0.1. Welcher machts anders?

            1. Sehe grade, dass trotz des e.preventDefault; das browser-eigene Kontextmenü aufgeht.

              Kommt auf den Browser an :)

              Bei mir wars der Firefox 7.0.1. Welcher machts anders?

              Vermutlich antike Browser ;) aber je moderner die Browser desto "ungerner" lassen sie zu, dass man default-Funktionen einfach unterdrückt.

              "Rechtsklicksperre" :)

              1. je moderner die Browser desto "ungerner" lassen sie zu, dass man default-Funktionen einfach unterdrückt.

                Das ist nicht korrekt. Einige Browser erlauben es, die Verarbeitung des contextmenu-Ereignisses zu unterbinden. Diese Option ist standardmäßig nicht aktiviert.

                https://forum.selfhtml.org/?t=207470&m=1411380

                Mathias

      2. Im verlinkten API finde ich auch nicht viel dazu. Google zeigt mir, dass metaKey die PC/Mac-Unterschiede abfängt, aber ich fand auch (zugegeben ältere) Diskussionen, dass das nicht ganz so klappt.

        Auf Windows ist Strg der Meta-Key, auf Mac ist es Cmd (Command). jQuery nimmt diese Vereinheitlichung vor.

        Ich bin auch nur drauf gekommen, weil ich vorher kein Event für den Rechtsklick gefunden hatte. Ginge es so?

        [code lang=javascript]$('.foo').bind('contextmenu', function(e) {
             e.preventDefault;

        preventDefault ist eine Methode. Du musst sie aufrufen.
        Dieser Code macht nichts. Er spricht die preventDefault-Eigenschaft an, welche ein Funktionsobjekt beinhaltet. Die zurückgelieferte Funktion wird aber nicht aufgerufen.

        Mathias