2013-06-19 13 views
5

Während ich weiß, dass die Erfassung von Schlüsseln aufgrund der e.keyCode vs e.charCode nicht trivial ist, dachte ich, dass jQuery ziemlich viel in der Lage sein würde, die meisten dieser Inkonsistenzen zu normalisieren.konsistente keyCode für `#`

Aber während answering this question Ich fand heraus, dass das Zeichen # scheint sehr inkonsistente keyCodes (und natürlich dies gilt auch für mehrere andere Codes, meist abhängig von der Browser-und Tastaturlayout ich denke).

Chrome und IE 191 ergab, Firefox 163 auf meinem Computer, berichtet ein anderer Benutzer 222. Chromes window.event sogar U+00BF als keyIdentifier berichtet - die nach Unicode-Tabellen ¿ sein sollte.

Kennen Sie eine konsistente Art und Weise solche Symbole wie die # mit inkonsistentem keycodes ohne böse etwas zu tun, um zu bestimmen, wie die folgenden:

$('input').keydown(function (e) { 
     if (e.which == 191 || e.which == 163 || e.which == 222){ 
      // hope you got the right key 
      e.preventDefault(); 
     } 
}); 

Fiddle for your pleasure.

+1

Uhm ... '#' ist ein Schlüssel '3' mit' shift' Modifikator. Es gibt keinen Schlüssel '#' überhaupt – zerkms

+3

@zerkms Ich denke, das hängt von Ihrem Tastaturlayout ab: -p – Christoph

+0

immer noch - es ist ** Schlüssel ** nach unten. Es gibt keine Taste '#' – zerkms

Antwort

7

Das ist für mich mit einem in Chrome und Firefox funktioniert US-Tastatur:

$('[id$=txtClient]').keypress(function (e) { 
    if (String.fromCharCode(e.which) == '#') { 
     e.preventDefault(); 
    } 
}); 

keypress ist das einzige Ereignis, das geben Sie zuverlässig Info über das Zeichen das eingegeben wurde.

Demo:http://jsfiddle.net/elclanrs/ebcet/9/

+0

Ich habe gelesen, dass Keypress unzuverlässig ist, deshalb habe ich versucht, dies zu vermeiden: 'da das Keypress-Ereignis nicht durch eine offizielle Spezifikation abgedeckt ist, Das tatsächliche Verhalten bei der Verwendung kann sich je nach Browser, Browserversion und Plattform unterscheiden. "Aber es funktioniert auch für mich. Auch das 'String.fromCharCode' ist wirklich ordentlich! – Christoph

+1

Ich bin mir nicht sicher, ob jQuery das 'keypress' Event magisch macht, aber immer in IE8 + und allen modernen Browsern funktioniert. – elclanrs

+0

Ich warte auf eine andere Antwort, die vielleicht dasselbe ohne Tastendruck erreichen kann, sonst werde ich natürlich deine akzeptieren, da ich mich über den fromCharCode freue;). – Christoph

0

Haben Sie versucht, die keypress Veranstaltung mit?

Die documentation warnt vor möglichen Unterschieden im Verhalten zwischen den Plattformen.

In Firefox zumindest entspricht e.which auf den ASCII-Code des getippten Zeichen nach der Transformation:

$('#txtClient').keypress(function (e) { 
    console.log('keypress:', e.which); 
    if (e.which == 35) { 
     return false; 
    } 
}); 

updated fiddle

+0

10 Minuten zu spät Alter: -p – Christoph

Verwandte Themen