2010-05-18 8 views
9

Im gewissen Logik in JavaScript mit Jquery zu schreiben, in dem ich den Eingang Inhalt gegen ein RegexMuster ex überprüfen muß:JavaScript Keycode 46 ist DEL Funktionstaste oder (.) Zeichen?

"^[a-zA-Z0-9_]*$" //Alpha-numeric and _ 

Die Logik ist fast fertig, ich habe nur ein kleines Problem Filterung der Funktionstaste DEL, meine Logik geht so:

var FunctionsKey = new Array(8, 9, 13, 16, 35, 36, 37, 39, 46); 

function keypressValidation(key) { 
      if (config.regexExp != null) { 
       if ($.inArray(key, FunctionsKey) != -1) { 
        return true; 
       } 
       else { 
        var keyChar = String.fromCharCode(key); 
        return RegexCheck(keyChar); 
       } 
      } 
      return true; 
     } 

wenn die KeyCode einer von denen in der Anordnung ist, lasse ich es passieren, wenn nicht ich die Zeichen und vergleichen sie gegen die REGEX bekommen. Das Problem ist: in einigen Browsern die DEL und '.' (Periodenzeichen) haben den gleichen Schlüssel Code 46.

So gibt es eine bessere Logik, um die Funktionstasten zu filtern, oder muss ich eine Bedingung für diesen Fall schreiben, vielleicht entferne die 46 aus dem Array und versuche, es in char zu konvertieren und wenn (.) lassen Sie es auf die Regex-Funktion gehen, wenn nicht passieren lassen? Die andere Frage wird sein, gibt es mehr gemeinsame Schlüsselcodes in einigen Browsern?

EDIT: Meine vorgeschlagene Lösung nicht funktionieren, da es keine Rolle, welche Taste der Benutzer gedrückt (DEL oder Zeit) habe ich immer als CHAR zumindest auf OPERA und FF = (

Antwort

9

110 (.). das Dezimalsystem Schlüsselcode, 46 ist die DEL-Taste

Für etwas Spaß. diese in setzen, um zu sehen, was Sie treffen EDIT: hinzugefügt, um eine fokussierte Veranstaltung

/* handle special key press */ 
$(document).ready(function() { 
    function checkAKey(e) { 
    var shouldBubble = true; 
    switch (e.keyCode) { 
     // user pressed the Tab 
     case 9: 
     { 
      alert("Tab hit, no bubble"); 
      shouldBubble = false; 
      break; 
     }; 
     // user pressed the Enter  
     case 13: 
     { 
      alert("Enter"); 
      break; 
     }; 
     // user pressed the ESC 
     case 27: 
     { 
      alert("Escape"); 
      break; 
     }; 
    }; 
    /* this propogates the jQuery event if true */ 
    return shouldBubble; 
    }; 

    $("*").keydown(function(e) { 
    return checkAKey(e); 

    }); 
}); 

ODER

$(document).ready(function() { 
    /* handle special key press */ 
    function checkFieldKey(e, me) { 
    var shouldBubble = true; 
    switch (e.keyCode) { 
     // user pressed the Enter 
     case 13: 
     { 
      $(me).blur(); 
      $("#somewhereElse").focus(); 
      shouldBubble = false; 
      break; 
     }; 
    }; 
    /* this propogates the jQuery event if true */ 
    return shouldBubble; 
    }; 
    /* user pressed special keys while in Selector */ 
    $("#myField").keydown(function(e) { 
    return checkFieldKey(e, $(this)); 
    }); 
}); 
+0

Ich werde es versuchen, Thx – JOBG

+0

Hinweis: Es gibt zwei "." Tasten auf vielen Tastaturen, probiere beide aus, (190 scheint wie eine Dezimalstelle zu sein, wenn ich mich aus toten Gehirnzellen richtig erinnere :) Du kannst eine Warnung hinzufügen(); um herauszufinden, genau –

+0

ok, die erste, die ich bemerke ist, dass Sie Keydown anstelle von Tastendruck verwenden, und es scheint, dass es ein Diff in welchem ​​Ereignis ich wähle, derzeit bin ich mit Tastendruck und das Ergebnis mit der Methode sind (.) = 0 (FF) - 46 (Opr), DEL = 46 auf der anderen Seite gibt Keydown (.) = 190, DEL = 46 für beide Browser, warum die Unterschiede? – JOBG

6

Dezimal oder Punkt Tastencode auf der Tastatur ist 190 .. dezimal auf Numpad ist 110.

Prost .. !!

+0

Der andere, der mich die ganze Zeit bekommt ist '-' * (189) * und' -' * (109) * – Abela

3

@ Mark Schultheiss' Antwort ist wirklich gut, werde ich etwas mehr, um es hinzuzufügen: Wenn Sie die DEL-Taste auf der Tastatur außerhalb des Eingangselementes drücken müssen (das heißt, wenn ein Textfeld den Fokus verliert) Sie müssen es abfangen.

$("#selector-for-a-textbox, body").keydown(function(event){ 
    if(event.keyCode==46){ 
    // do something here 
    } 
}); 
2

Der Unterschied ist: Auf Tastendruck „LÖSCHEN“ Taste und Dies kann wie so getan werden „“ Schlüssel gibt den Schlüsselcode 46 zurück.

Also schreiben Sie den Code auf keyup oder Taste, dann funktioniert "DELETE" -Taste gut.

Um http://javascript.info/tutorial/keyboard-events

Falscher Code

window.addEventListener("keypress", dealWithKeyboard, false); 

Rechts Code zu überprüfen:

window.addEventListener("keydown", dealWithKeyboard, false); 

Schlusscode

window.addEventListener("keydown", dealWithKeyboard, false); 
function dealWithKeyboard(e) { // CHECK KEYPRESS EVENT 
     if(e.keyCode ==46){ 
      delete_object();} 
     } 

seine gut für mich arbeiten.

Verwandte Themen