it-swarm.com.de

Wie Sie feststellen können, ob .keyup () ein Zeichenschlüssel ist (jQuery)

Wie Sie feststellen können, ob .keyup () ein Zeichenschlüssel ist (jQuery)

$("input").keyup(function() {

if (key is a character) { //such as a b A b c 5 3 2 $ # ^ ! ^ * # ...etc not enter key or shift or Esc or space ...etc
/* Do stuff */
}

});
60
faressoft

Hinweis: Im Nachhinein war dies eine schnelle und schmutzige Antwort und funktioniert möglicherweise nicht in allen Situationen. Eine zuverlässige Lösung finden Sie unter Tim Downs Antwort (Kopieren Sie hier, dass diese Antwort immer noch Ansichten und Upvotes enthält):

Mit dem Ereignis keyup können Sie dies nicht zuverlässig tun. Wenn du wissen willst Wenn Sie etwas über das eingegebene Zeichen schreiben, müssen Sie die .__ verwenden. stattdessen ein Tastendruckereignis.

Das folgende Beispiel funktioniert in den meisten Browsern immer, außer Es gibt einige Edge-Fälle, die Sie kennen sollten. Für was ist in Meiner Ansicht nach die endgültige Anleitung dazu http://unixpapa.com/js/key.html .

$("input").keypress(function(e) {
    if (e.which !== 0) {
        alert("Charcter was typed. It was: " + String.fromCharCode(e.which));
    }
});

keyup und keydown geben Ihnen Informationen über den physischen Schlüssel, den wurde gedrückt. Auf Standard-US/UK-Tastaturen in ihren Standardlayouts ist es Es sieht so aus, als ob zwischen der keyCode-Eigenschaft von .__ eine Korrelation besteht. diese Ereignisse und den Charakter, den sie repräsentieren. Dies ist jedoch nicht zuverlässig: Unterschiedliche Tastaturlayouts haben unterschiedliche Zuordnungen.


Das Folgende war die ursprüngliche Antwort, ist jedoch nicht korrekt und funktioniert möglicherweise nicht in allen Situationen zuverlässig.

Um den Schlüsselcode mit einem Word-Zeichen abzugleichen (z. B. würde a passen. space würde nicht)

$("input").keyup(function(event)
{ 
    var c= String.fromCharCode(event.keyCode);
    var isWordcharacter = c.match(/\w/);
}); 

Ok, das war eine schnelle Antwort. Der Ansatz ist derselbe, aber hüten Sie sich vor Schlüsselcode-Problemen. Siehe article im quirksmode . </ Strike>

45
Nivas

Mit dem Ereignis keyup können Sie dies nicht zuverlässig tun. Wenn Sie etwas über das eingegebene Zeichen wissen möchten, müssen Sie stattdessen das Ereignis keypress verwenden.

Das folgende Beispiel funktioniert in den meisten Browsern ständig, es gibt jedoch einige Edge-Fälle, die Sie kennen sollten. Was meiner Meinung nach die endgültige Anleitung dazu ist, finden Sie unter http://unixpapa.com/js/key.html .

$("input").keypress(function(e) {
    if (e.which !== 0) {
        alert("Charcter was typed. It was: " + String.fromCharCode(e.which));
    }
});

keyup und keydown geben Ihnen Informationen über den gedrückten physischen Schlüssel. Auf Standard-US/UK-Tastaturen in ihren Standardlayouts scheint es eine Korrelation zwischen der keyCode-Eigenschaft dieser Ereignisse und dem von ihnen repräsentierten Charakter zu geben. Dies ist jedoch nicht zuverlässig: Unterschiedliche Tastaturlayouts weisen unterschiedliche Zuordnungen auf.

97
Tim Down

Das hat mir geholfen:

$("#input").keyup(function(event) {
        //use keyup instead keypress because:
        //- keypress will not work on backspace and delete
        //- keypress is called before the character is added to the textfield (at least in google chrome) 
        var searchText = $.trim($("#input").val());

        var c= String.fromCharCode(event.keyCode);
        var isWordCharacter = c.match(/\w/);
        var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);

        // trigger only on Word characters, backspace or delete and an entry size of at least 3 characters
        if((isWordCharacter || isBackspaceOrDelete) && searchText.length > 2)
        { ...
11
TARL

Mit den anderen Antworten bin ich nicht ganz zufrieden. Sie haben alle einen Fehler.

Die Verwendung von keyPress mit event.which ist unzuverlässig, da Sie keine Rücktaste oder Löschvorgänge abfangen können (wie von Tarl erwähnt) Die Verwendung von keyDown (wie in den Antworten von Niva und Tarl) ist etwas besser event.keyCode mit String.fromCharCode() verwenden (keyCode und charCode sind nicht gleich!).

Was wir jedoch mit dem Ereignis keydown oder keyup haben, ist die tatsächlich gedrückte Taste (event.key) . Soweit ich das beurteilen kann, ist jede key mit einer Länge von 1 ein Zeichen (Nummer oder Buchstabe), unabhängig von welche Sprachtastatur Sie verwenden. Bitte korrigieren Sie mich, wenn das nicht stimmt!

Dann gibt es diese sehr lange Antwort von asdf. Das funktioniert zwar perfekt, scheint aber übertrieben zu sein.


Hier ist eine einfache Lösung, die alle Zeichen, die Rücktaste und das Löschen einfängt. (Hinweis: Entweder keyup oder keydown funktionieren hier, aber keypress nicht.)

$("input").keydown(function(e) {

    var isWordCharacter = event.key.length === 1;
    var isBackspaceOrDelete = (event.keyCode === 8 || event.keyCode === 46);

    if (isWordCharacter || isBackspaceOrDelete) {

    }
});
9
HankScorpio

Wenn Sie lediglich die Schlüssel enter, escape und spacebar ausschließen müssen, können Sie Folgendes tun:

$("#text1").keyup(function(event) {
if (event.keyCode != '13' && event.keyCode != '27' && event.keyCode != '32') {
     alert('test');
   }
});

Sehen Sie hier die Aktionen.

Die vollständige Liste der Schlüsselcodes finden Sie hier zur weiteren Änderung.

4
bla

Ich wollte genau das tun und dachte an eine Lösung, die beide die keyup - und die keypress -Ereignisse beinhaltet.

(Ich habe es nicht in allen Browsern getestet, aber ich habe die Informationen unter http://unixpapa.com/js/key.html verwendet).

Bearbeiten: Schreibe es als jQuery-Plugin um.}

(function($) {
    $.fn.normalkeypress = function(onNormal, onSpecial) {
        this.bind('keydown keypress keyup', (function() {
            var keyDown = {}, // keep track of which buttons have been pressed
                lastKeyDown;
            return function(event) {
                if (event.type == 'keydown') {
                    keyDown[lastKeyDown = event.keyCode] = false;
                    return;
                }
                if (event.type == 'keypress') {
                    keyDown[lastKeyDown] = event; // this keydown also triggered a keypress
                    return;
                }

                // 'keyup' event
                var keyPress = keyDown[event.keyCode];
                if ( keyPress &&
                     ( ( ( keyPress.which >= 32 // not a control character
                           //|| keyPress.which == 8  || // \b
                           //|| keyPress.which == 9  || // \t
                           //|| keyPress.which == 10 || // \n
                           //|| keyPress.which == 13    // \r
                           ) &&
                         !( keyPress.which >= 63232 && keyPress.which <= 63247 ) && // not special character in WebKit < 525
                         !( keyPress.which == 63273 )                            && //
                         !( keyPress.which >= 63275 && keyPress.which <= 63277 ) && //
                         !( keyPress.which === event.keyCode && // not End / Home / Insert / Delete (i.e. in Opera < 10.50)
                            ( keyPress.which == 35  || // End
                              keyPress.which == 36  || // Home
                              keyPress.which == 45  || // Insert
                              keyPress.which == 46  || // Delete
                              keyPress.which == 144    // Num Lock
                              )
                            )
                         ) ||
                       keyPress.which === undefined // normal character in IE < 9.0
                       ) &&
                     keyPress.charCode !== 0 // not special character in Konqueror 4.3
                     ) {

                    // Normal character
                    if (onNormal) onNormal.call(this, keyPress, event);
                } else {
                    // Special character
                    if (onSpecial) onSpecial.call(this, event);
                }
                delete keyDown[event.keyCode];
            };
        })());
    };
})(jQuery);
4
asdf

Die Validierung des Schlüsselcodes hat mir nie gefallen. Mein Ansatz bestand darin zu sehen, ob die Eingabe Text (irgendein Zeichen) hat, um zu bestätigen, dass der Benutzer Text und keine anderen Zeichen eingibt

$('#input').on('keyup', function() {
    var words = $(this).val();
    // if input is empty, remove the Word count data and return
    if(!words.length) {
        $(this).removeData('wcount');
        return true;
    }
    // if Word count data equals the count of the input, return
    if(typeof $(this).data('wcount') !== "undefined" && ($(this).data('wcount') == words.length)){
        return true;
    }
    // update or initialize the Word count data
    $(this).data('wcount', words.length);
    console.log('user tiped ' + words);
    // do you stuff...
});
<html lang="en">
  <head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  </head>
  <body>
  <input type="text" name="input" id="input">
  </body>
</html>

0
lordlouis