2015-08-06 1 views
1

Я использую тег Struts2 <s:textfield />, и приведенный ниже код вычисляет и проверяет/проверяет значение, введенное в текстовое поле «на лету» с помощью JS.SHIFT + HOME и SHFT + клавиши влево/вправо для текстовых полей не работают

Он также обновляет общее количество, введенное в список textfield, обрабатываются onblur и onkeydown событиями, как показано ниже.

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

Используя этот код SHIFT + HOME, SHIFT + Левого и SHIFT + Правой клавиши Функциональные не работает.

Есть ли возможности, что это связано с onblur и 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; 
     } 
    } 
} 

ответ

1

код будет выглядеть следующим образом ...

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

Вы должны использовать keypress событие вместо keydown один.

keypress будет перехватывать результирующий характер,
в то время как keydown будет интерпретировать SHIFT как самой кнопки.

Тогда попробуйте использовать

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

Я предполагаю, что вы должны проверить и разрешить только десятичные значения. В этом случае этот фрагмент выполнит эту работу.

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

Пожалуйста, не стесняйтесь, поправьте меня, если я не правильно прочитал вопрос.

Смежные вопросы