文本字段的 SHIFT+HOME 和 SHFT+left/right 键不起作用

SHIFT+HOME and SHFT+left/right keys for text fields not working

我正在使用 Struts2 <s:textfield /> 标签,下面的代码使用 JS 计算并检查/验证在文本字段中输入的值。

它还会更新在 textfield 列表中输入的总数,这些由 onbluronkeydown 事件处理,如下所示。

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

通过使用此代码 SHIFT+HOME , SHIFT+ LeftSHIFT+Right 键功能不起作用。

这是否有可能是由于 onbluronkeydown 事件造成的?

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

代码将如下所示...

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

    }

您需要使用 keypress 事件而不是 keydown 事件。

keypress会截取结果字符,
keydown 会将 SHIFT 解释为按钮本身。

然后尝试使用

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

我假设您需要验证并只允许十进制值。在这种情况下,此代码段将完成工作。

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

如果我没有正确阅读问题,请随时纠正我。