2015-08-06 7 views
1

J'utilise Struts2 <s:textfield /> et le code ci-dessous calcule et vérifie/valide la valeur entrée dans le champ de texte à la volée avec JS.SHIFT + HOME et SHFT + touches gauche/droite pour les champs de texte ne fonctionnent pas

Il met également à jour le total entré dans textfield liste, ceux-ci sont gérés par onblur et onkeydown événements comme ci-dessous.

<s:textfield id = "fieldid" 
      name = "xyz" 
     onblur = "javascript:calculateTotal()" 
     onkeydown = "javascript:checkDecimal(this); return checkDecimal(event);" 
/> 

En utilisant ce code SHIFT +HOME, SHIFT +gauche et SHIFT +droite fonctionnalités clés ne fonctionnent pas.

Y a-t-il des possibilités que cela soit dû aux événements onblur et onkeydown?

function checkDecimal(evt) { 
    var charCode; 
    var version = msieversion(); 
    if(version==8){ 
     charCode = (window.event) ? evt.keyCode : evt.which; 
     charCode = (window.event) ? evt.keyCode : evt.which; 
    }else{ 
     charCode = (evt.which) ? evt.which : evt.keyCode; 
    } 
    if (!evt.shiftKey) { 
     if ((charCode >= 48 && charCode <= 57) || 
      (charCode == 8)      || 
      (charCode == 46)     || 
      (charCode == 190)     || 
      (charCode == 35)     || 
      (charCode == 36)     || 
      (charCode == 9)      || 
      (charCode == 37)     || 
      (charCode == 39)     || 
      (charCode >= 96 && charCode <= 105) || 
      (charCode == 110)) 
     { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     if (charCode == 9) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

Répondre

1

code ressemblera à ceci ...

if (!evt.shiftKey) { 
     if ((charCode >= 48 && charCode <= 57) || 
      (charCode == 8)      || 
      (charCode == 46)     || 
      (charCode == 190)     || 
      (charCode == 35)     || 
      (charCode == 36)     || 
      (charCode == 9)      || 
      (charCode == 37)     || 
      (charCode == 39)     || 
      (charCode >= 96 && charCode <= 105) || 
      (charCode == 110)) 
     { 
      return true; 
     } else { 
      return false; 
     } 
    }  else if(evt.shiftKey) { 

    if ((charCode == 35) || (charCode == 39) || (charCode == 37) || (charCode == 36)) { 
        return true; 
      } 

    } 
2

Vous devez utiliser l'événement keypress au lieu du keydown un.

Le keypress intercepte le caractère résultant,
alors que le keydown interprétera le SHIFT comme un bouton lui-même.

essayez d'utiliser

<s:textfield id = "fieldid" 
      name = "xyz" 
     onblur = "javascript:calculateTotal()" 
    onkeypress = "javascript:checkDecimal(this); return checkDecimal(event);" 
/> 
1

Je suppose que vous devez valider et autoriser uniquement les valeurs décimales. Dans ce cas, cet extrait fera l'affaire.

<input id = "fieldid" 
 
     name = "xyz" 
 
    onblur = "javascript:calculateTotal()" onkeypress="return checkDecimal(event);" /> 
 
<script> 
 
function isNumeric(n) { 
 
    return !isNaN(parseFloat(n)) && isFinite(n); 
 
} 
 
function checkDecimal(evt) { 
 
    var charCode = (window.event) ? evt.keyCode : evt.which; 
 
    var currentVal = String.fromCharCode(charCode); 
 
    var val = document.getElementById(evt.currentTarget.id).value + '' + currentVal; 
 
    return (evt.shiftKey || isNumeric(val) || isNumeric(currentVal) || String.fromCharCode(currentVal) == '.'); 
 
} 
 
</script>

S'il vous plaît ne hésitez pas à me corriger si je ne comprends bien la question.