2014-03-26 10 views
10

Ich versuchte preventDefault(), aber ich hatte keinen Erfolg. Gibt es etwas, das ich vermisse?gibt es eine Möglichkeit zu verhindern, dass HTML accesskey = "" aktiviert wird?

Ich würde versuchen, es global zu deaktivieren, wenn möglich (wie die Ereignisse der Registrierung auf window)

+0

Tastenkombination ist plattformabhängig, aber ich spreche von HTML-Accesskeys –

+1

Warum nicht einfach die Attribute entfernen? – Teemu

+0

Ich denke, das würde die Zugänglichkeit beeinträchtigen ... ist das die einzige Option? –

Antwort

10

Es ist kein Weg zu sein scheint das Auslösen des Ereignisses aus zu stoppen. Die einzige Alternative scheint zu sein, die Accesskey-Attribute vorübergehend zu entfernen, während sie nicht funktionieren sollen. Das ist was jQuery UI has to do for modal dialogs.

Hier ist der Code aus diesem Thread:

$("#boxA-dialog").dialog({ 
    autoOpen: false, 
    modal: true, 
    height: 400, 
    width: 300, 
    open: function(event, ui) { 
     ak = $('[accesskey]').each(function() { 
      $(this).data('ak', $(this).attr('accesskey')).removeAttr('accesskey') 
     }) 
    }, 
    close: function(event, ui) { 
     ak.each(function() { 
      $(this).attr('accesskey', $(this).data('ak')) 
     }) 
    } 
}); 

Wie Sie es Speichern der accesskey Attribute jQuery Daten vor dem Entfernen sie sehen kann:

$(this).data('ak', $(this).attr('accesskey')).removeAttr('accesskey') 

und aus dem Daten dann wieder herstellt:

$(this).attr('accesskey', $(this).data('ak')) 

Ich würde in einer Lösung interessiert sein, die die Event-Ratte tatsächlich verhindert sie als diese Problemumgehung verwenden.

0

Wenn ich Ihr Problem richtig verstehe, können Sie dies versuchen.

+0

Das wäre zu spät, als was Element im Fokus hätte zu diesem Zeitpunkt Fokus verloren hätte. –

0

Mit der vorherigen Antwort können Sie diesen Trick verwenden, um alle "accesskey" -Optionen von der Seite zu "entfernen".

$('[accesskey*=]').attr('accesskey',''); 

Setzen Sie einfach alle accesskey auf der Seite für nichts.

+0

Möglicherweise müssen Sie die Attribute jedoch wiederherstellen. –

+0

Aber darum ging es nicht. also keine Notwendigkeit, es zu komplizieren, nein? – Amirdev

+0

Wenn sie nur entfernt werden, sollten sie nicht an erster Stelle sein. Ich gehe davon aus, dass Wes das Wort "verhindern" benutzt, dass er nur unter bestimmten Bedingungen blockiert werden will und dass, wenn diese Bedingungen nicht erfüllt werden, sie normal arbeiten sollen. –