Ankündigung

Einklappen
Keine Ankündigung bisher.

altKey deaktivieren?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • altKey deaktivieren?

    Hallo,

    kann mir bitte jemand das große Geheimnis verraten, warum ich die [ALT]-Taste im IE11 nicht deaktivieren kann?
    Leider funktioniert folgender Code und in etwaigen Variationen nicht:
    Code:
    $(document).keydown(function(event) {
            if(event.altKey) {
                event.cancelBubble = true;
                event.returnValue = false;
                event.keyCode = false;
                return false;
            }
    });
    Hintergrund:
    Es handelt sich hierbei um eine Seite im Intranet.
    Ich benötige die [ALT]-Taste in Kombination mit den Buchstaben [A-Z] für weitere Funktionen.
    Man friert nur, wenn man glaubt, einem sei kalt


  • #2
    Also bei mir funktioniert das so auch im IE:

    PHP-Code:
    $(function() {
        $(
    document).keydown(function(event) {     
            if (
    event.altKey){
                
    alert('ALT disabled');
                return 
    false;
            }
        });
    }); 

    Kommentar


    • #3
      Hallo,

      ja, das ist zum Beispiel auch seltsam.
      Das mit dem alert hatte ich auch schon probiert und tatsächlich funktioniert es da sogar. Aber ohne alert gehts wieder nicht.

      Ich versteh das nicht.
      Man friert nur, wenn man glaubt, einem sei kalt

      Kommentar


      • #4
        Wenn es dir darum geht, dass z.B. bei ALT+D nicht das "Datei"-Menü kommt, gibt es folgenden Workaround:

        Code:
        <a href="#" accesskey="d"></a>

        Kommentar


        • #5
          Na, das ist ja sensationell.
          Und ich hatte mir das extra mit jQuery zusammengebaut, das ist ja viel einfacher.
          Allerdings funktioniert [ALT] + [D] beim IE11 aber nur, wenn auch ein entsprechender accesskey="d" vorhanden ist, ansonsten führt der Browser seine eigene Aktion durch.

          Das ist aber für meine Zwecke völlig OK.

          Vielen Dank.
          Man friert nur, wenn man glaubt, einem sei kalt

          Kommentar


          • #6
            Hm, ich glaube zu früh gefreut.

            Zwar funktioniert jetzt beim IE11 [ALT] + [D], aber wie ich feststellte [ALT] + [E] nicht. Und das lässt sich anscheinend mit dem Workaround accesskey nicht umgehen.



            Ich habe zu Testzwecken für jeden Buchstaben einen Link erzeugt und das ganze in einigen Browsern getestet.

            1. Zuerst ohne Script und mit accesskey und
            2. anschließend mit Script in Kombination mit accesskey.

            Beim Firefox ohne Script muss man natürlich zusätzlich zur Tastenkombination [ALT] + [Buchstabe] noch [Shift] nehmen.

            Folgendes Ergebnis kam dabei raus:
            1. ohne Script 2. mit Script
            Edge D D
            Chrome D, E, F ok
            IE11 E E
            Firefox ok ok
            Opera D, F, P ok










            Hat noch jemand eine Idee, wie ich den Edge und den IE11 überredet bekomme?

            Hier der Code:
            HTML-Code:
            <div>
                <a class="nav" id="linkMenue1" href="#anchor1" data-firstLetter="A" accesskey="A"><u>A</u>aa</a>
                <a class="nav" id="linkMenue2" href="#anchor2" data-firstLetter="B" accesskey="B"><u>B</u>bb</a>
                <a class="nav" id="linkMenue3" href="#anchor3" data-firstLetter="C" accesskey="C"><u>C</u>cc</a>
                <a class="nav" id="linkMenue4" href="#anchor4" data-firstLetter="D" accesskey="D"><u>D</u>dd</a>
                <a class="nav" id="linkMenue5" href="#anchor5" data-firstLetter="E" accesskey="E"><u>E</u>ee</a>
                <a class="nav" id="linkMenue6" href="#anchor6" data-firstLetter="F" accesskey="F"><u>F</u>ff</a>
                <a class="nav" id="linkMenue7" href="#anchor7" data-firstLetter="G" accesskey="G"><u>G</u>gg</a>
                <a class="nav" id="linkMenue8" href="#anchor8" data-firstLetter="H" accesskey="H"><u>H</u>hh</a>
                <a class="nav" id="linkMenue9" href="#anchor9" data-firstLetter="I" accesskey="I"><u>I</u>ii</a>
                <a class="nav" id="linkMenue10" href="#anchor10" data-firstLetter="J" accesskey="J"><u>J</u>jj</a>
                <a class="nav" id="linkMenue11" href="#anchor11" data-firstLetter="K" accesskey="K"><u>K</u>kk</a>
                <a class="nav" id="linkMenue12" href="#anchor12" data-firstLetter="L" accesskey="L"><u>L</u>ll</a>
                <a class="nav" id="linkMenue13" href="#anchor13" data-firstLetter="M" accesskey="M"><u>M</u>mm</a>
                <a class="nav" id="linkMenue14" href="#anchor14" data-firstLetter="N" accesskey="N"><u>N</u>nn</a>
                <a class="nav" id="linkMenue15" href="#anchor15" data-firstLetter="O" accesskey="O"><u>O</u>oo</a>
                <a class="nav" id="linkMenue16" href="#anchor16" data-firstLetter="P" accesskey="P"><u>P</u>pp</a>
                <a class="nav" id="linkMenue17" href="#anchor17" data-firstLetter="Q" accesskey="Q"><u>Q</u>qq</a>
                <a class="nav" id="linkMenue18" href="#anchor18" data-firstLetter="R" accesskey="R"><u>R</u>rr</a>
                <a class="nav" id="linkMenue19" href="#anchor19" data-firstLetter="S" accesskey="S"><u>S</u>ss</a>
                <a class="nav" id="linkMenue20" href="#anchor20" data-firstLetter="T" accesskey="T"><u>T</u>tt</a>
                <a class="nav" id="linkMenue21" href="#anchor21" data-firstLetter="U" accesskey="U"><u>U</u>uu</a>
                <a class="nav" id="linkMenue22" href="#anchor22" data-firstLetter="V" accesskey="V"><u>V</u>vv</a>
                <a class="nav" id="linkMenue23" href="#anchor23" data-firstLetter="W" accesskey="W"><u>W</u>ww</a>
                <a class="nav" id="linkMenue24" href="#anchor24" data-firstLetter="X" accesskey="X"><u>X</u>xx</a>
                <a class="nav" id="linkMenue25" href="#anchor25" data-firstLetter="Y" accesskey="Y"><u>Y</u>yy</a>
                <a class="nav" id="linkMenue26" href="#anchor26" data-firstLetter="Z" accesskey="Z"><u>Z</u>zz</a>
            </div>
            Code:
                $(document).keydown(function(event) {
            
                    $keyCode = (event.keyCode ? event.keyCode : event.which);
            
                    if ($keyCode >= 65 && $keyCode <= 90 && event.altKey) {
            
                        $arrKeyCode    = {
                                char65:'A', char66:'B', char67:'C', char68:'D', char69:'E', 
                                char70:'F', char71:'G', char72:'H', char73:'I', char74:'J',
                                char75:'K', char76:'L', char77:'M', char78:'N', char79:'O',
                                char80:'P', char81:'Q', char82:'R', char83:'S', char84:'T',
                                char85:'U', char86:'V', char87:'W', char88:'X', char89:'Y',
                                char90:'Z'
                            };
            
                        $obj        = $('[data-firstLetter="' + $arrKeyCode['char' + $keyCode] + '"]');
                        $last        = $('[data-firstLetter="' + $arrKeyCode['char' + $keyCode] + '"]:last');
                        $hasFocus    = $('[data-firstLetter="' + $arrKeyCode['char' + $keyCode] + '"]:focus');
            
                        ($hasFocus.text().length == 0 || $hasFocus.is($last) ? $obj.first().focus() : $hasFocus.next().focus());
            
                        event.preventDefault();
                        event.stopPropagation();
                        return false;
            
                    }
            
                });
            Man friert nur, wenn man glaubt, einem sei kalt

            Kommentar


            • #7
              Sinnvoll wäre es System- und Browsershortcuts erst gar nicht zu überschreiben. Es hat schon einen guten Grund warum es sie gibt. Und mit sowas treibst du nur deine Seitenbesucher in Rage, weil sie ihre Shortcuts nicht mehr verwenden können.

              Kommentar


              • #8
                Da bin ich voll und ganz deiner Meinung.
                Im Normalfall würde ich das auch nicht machen.
                Aber diese Seite befindet sich im Intranet und das ganze soll der Funktionalität dienen.
                Es ist ohnehin untersagt, das User hier weitere Einstellungen vornehmen.
                Man friert nur, wenn man glaubt, einem sei kalt

                Kommentar


                • #9
                  Ich denke das geht nicht mit allen Buchstaben. Haben schon andere vor dir versucht, zum Beispiel hier: https://stackoverflow.com/questions/...ar-application

                  Kannst also nur die Buchstaben nehmen die nicht vom IE11 vorbelegt sind.

                  Du könntest aber auf eine andere Tastaturkombination ausweichen, zum Beispiel [ALT GR] + Buchstabe entsprechend Keycode 17 und 18 für ALT+CTRL.

                  Zum Testen sollte auch immer die Konsolenausgabe verwendet werden. Alert ist ein OS Modal-Fenster und unterbindet daher gewisse Funktionalität wie das öffnen des Druckerfensters bei ALT+p, daher zum testen ungeeignet.

                  Kommentar


                  • #10
                    Hm, das finde ich jetzt aber ganz schön doof. Dann habe ich mich der verfluchten [Alt]-Taste 3 Tage umsonst gewidmet.

                    Mit [Alt Gr] geht es leider auch nicht, da z. B. [Alt Gr] + [M] ein windowsübergreifender ShortCut ist und noch einige andere.
                    Dann muss ich an dieser Stelle wohl leider aufgeben.

                    Bleiben mir noch drei Möglichkeiten:
                    1. Da hier in meinem Fall ja nur gelesen wird und nicht geschrieben, könnte ich vielleicht noch versuchen, nur den Buchstaben zu nutzen ohne weitere Tasten wie Alt, Ctrl usw.
                    2. Oder den Admin überreden, kein IE11, bzw. Edge zu verwenden.
                    3. Oder es irgendwie vermeiden, Links mit den Anfangsbuchstaben E oder D zu erstellen, allerdings weiß man nie, was zukünftige Updates der Browser so bringen.

                    Und danke für den Hinweis mit der Konsole, werde ich zukünftig so machen.
                    Man friert nur, wenn man glaubt, einem sei kalt

                    Kommentar


                    • #11
                      PHP-Code:
                        $arrKeyCode    = { char65:'A'char66:'B', ..., char90:'Z' }; 
                      Guck dir mal ord und chr an.

                      Grüße.

                      Kommentar


                      • #12
                        Zitat von php1704 Beitrag anzeigen
                        Guck dir mal ord und chr an.
                        Das ist aber PHP und hier sind wir bei Javascript.

                        Kommentar


                        • #13
                          Zitat von protestix Beitrag anzeigen

                          Das ist aber PHP und hier sind wir bei Javascript.
                          Oh stimmt ja. Haben mich die $-Zeichen in den Variablenamen wohl irritiert.

                          Dann sind's String.fromCharCode und String.charCodeAt

                          Grüße.

                          Kommentar


                          • #14
                            Hast das wohl alles nicht richtig verfolgt. Er braucht nicht den Codewert einer Taste, den hat ja schon mit keyCode.

                            Kommentar


                            • #15
                              Ne, das hab ich schon verstanden.

                              Code:
                              ....
                              keyCode = 65; 
                              console.log(String.fromCharCode(keyCode)); // -> A

                              Grüße.

                              Kommentar

                              Lädt...
                              X