2010-05-18 10 views
9

Im scrivendo una certa logica in JavaScript utilizzando jQuery, dove devo controllare il contenuto di ingresso nei confronti di un modello REGEX ex:Il codice chiave JavaScript 46 è il tasto funzione DEL o il segno del punto (.)?

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

La logica è quasi fatto, ho solo un piccolo problema filtrando il tasto funzione DEL, la mia logica è questa:

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; 
     } 

Se il KeyCode è uno di quelli nella matrice, ho lasciato passare, se non ottengo il carattere e lo confrontiamo contro il rEGEX. Il problema è: in alcuni browser il DEL e '.' (segno di periodo) hanno la stessa chiave Codice 46.

Quindi c'è una logica migliore per filtrare i tasti funzione o devo scrivere una condizione per quel caso, magari rimuovendo il 46 dall'array e provate a convertirlo in char e se è (.) lasciarlo andare alla funzione Regex se non lasciarlo passare? L'altra domanda sarà ci sono codici chiave più condivisi in alcuni browser?

EDIT: La mia soluzione suggerita non funzionerà, perché non importa quale tasto l'utente ha premuto (DEL o periodo) ottengo sempre come CHAR almeno su Opera e FF = (

risposta

9

110 è (.). il codice decimale chiave, 46 è il tasto dEL

per un certo divertimento:. mettere questo per vedere che cosa ti ha colpito EDIT: aggiunto un evento mirato

/* 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); 

    }); 
}); 

O

$(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

Proverò a provare, thx – JOBG

+0

nota: ci sono due "." tasti su molte tastiere, provali entrambi, (190 sembra che potrebbe essere un decimale se ricordo correttamente da cellule cerebrali morte :) Puoi aggiungere un avviso(); per scoprire esattamente –

+0

ok, il primo che ho notato è che usi keydown anziché keypress, e sembra che ci sia un diff in quale evento scegliamo, attualmente sto usando keypress e il risultato con il metodo sono (.) = 0 (FF) - 46 (Opr), DEL = 46 nell'altra mano il keydown dà (.) = 190, DEL = 46 per entrambi i browser, perché le differenze? – JOBG

6

Il codice tasto decimale o punto sulla tastiera è 190 .. decimale sul tastierino numerico è 110.

applausi .. !!

+0

L'altro che mi dà sempre è '-' * (189) * e' -' * (109) * – Abela

3

@ Marco Schultheiss' risposta è davvero buono, io aggiungo un po 'di più ad esso: quando è necessario premere il pulsante DEL sulla tastiera al di fuori del elemento di input (cioè quando un campo di testo non è più attivo) devi intercettarlo. Questo può essere fatto in questo modo:

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

La differenza è: Su pressione del tasto chiave e "delete" "" tasto restituisce il codice chiave 46.

Quindi scrivere il codice su keyup o key down, quindi il tasto "DELETE" funziona bene.

Per controllare il codice http://javascript.info/tutorial/keyboard-events

sbagliato

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

codice giusto:

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

codice finale

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

il suo lavoro bene per me.

Problemi correlati