2016-04-20 19 views
1

Hier ist mein Code:Javascript keypress Ereignis funktioniert nicht in Firefox

function filter(obj,re) { 
     if (obj&&obj.tagName.toLowerCase()=="input") { 
     obj.filter=re; 
     on(obj,"keypress",function(e) { 
      if (e.keyCode<32) return true; 
      if (!(String.fromCharCode(e.keyCode).match(this.filter))) { 
      e.stopPropagation(); e.preventDefault(); return false; 
      } 
     }); 
     } 
    } 

filter(element,new RegExp('[\\w\\d]+')); 

Es funktioniert in Google Chrome in Ordnung, aber es funktioniert nicht in Firefox. Was passiert, ist, dass ich dem dom-Element ein keypress-Ereignis hinzufüge, das die Daten basierend auf dem Filter herausfiltert.

In jedem Fall würde jede Hilfe geschätzt werden.

UPDATE

Hier ist die on Funktion:

function on(obj,evt,func) { 
    if (obj.addEventListener) obj.addEventListener(evt,func,false); 
    else obj.attachEvent("on"+evt,func); 
} 
+0

Bessere Einbuchtung + Fehlerprotokoll + "auf" Körper hilfreich wäre die Funktion. – leaf

+0

Ersetzen Sie 'Regexp' durch' RegExp' (übrigens 'Regexp' funktioniert nicht in Chrome ...). – leaf

+0

@procrastinator Entschuldigung das ist eigentlich RegExp. – slicks1

Antwort

1

Die KeyboardEvent.keyCode Eigenschaft ist veraltet - in Firefox alle druckbaren Zeichen führen zu einem Null-Wert und damit wird der Handler immer Rückkehr ohne etwas zu tun . Die charCode-Eigenschaft scheint immer noch sowohl in Chrome als auch in Firefox zu funktionieren. Sie sollten sich jedoch nicht darauf verlassen, da tatsächlich alle Eigenschaften des Zeichencodes veraltet oder nicht standardisiert sind.

Wie auf MDN:

Dies sollte nicht durch neue Web-Anwendungen verwendet werden. IE und Firefox unterstützen KeyboardEvent.key bereits (teilweise). Google Chrome und Safari unterstützen KeyboardEvent.keyIdentifier, das im alten Entwurf von DOM Level 3-Ereignissen definiert ist. Wenn Sie sie oder einen von ihnen verwenden können, sollten Sie sie so weit wie möglich verwenden.

Hinweis: Web-Entwickler nicht das Schlüsselcode-Attribut für druckbare Zeichen verwenden soll, wenn keydown und keyup Behandlung von Ereignissen. Wie oben beschrieben, ist das Schlüsselcode-Attribut nicht für druckbare Zeichen nützlich, insbesondere für solche, die mit gedrückter Umschalt- oder Alt-Taste eingegeben wurden.

Wenn Sie den Wert der gedrückten Taste jedoch diese Option noch Cross-Browser ganz neu ist und nicht zu halten sind Targeting ist modernen Browser oder Geräte dann die key Eigenschaft bestimmt.


Für Cross-Browser/Legacy-Unterstützung, was die meisten Menschen tun, ist es, die die gesamte Eingang statt nur einer Taste bestätigen. Im folgenden vereinfachten Beispiel kann der Benutzer beispielsweise eingeben, aber dann die Zeichen aus der Wertzeichenfolge entfernen, die nicht mit dem regulären Ausdruck übereinstimmen.

<input id="myInput"/> 
var input = document.getElementById('myInput'), 
    sanitise = function(){ 
     input.value = input.value.replace(/\w+/, ''); 
    }; 

input.addEventListener('keyup', sanitise); 

» Fiddle

+0

Danke funktioniert super – slicks1

Verwandte Themen