首页 > 解决方案 > 使用 keydown 事件识别小数点前的编辑

问题描述

我需要在使用 angular 6 出现之前验证输入。要求是确定我是在十进制之前还是之后进行编辑。如果它在小数点之前我必须允许,如果不是那么我必须限制。前任。138.02 (如果我在小数点之前输入 138 之后的 4 那么它应该可以工作,新值应该是 1384.02 但如果我在 .02 之后输入(任何数字)它不应该工作。

我正在关注以下代码

function validateFloatKeyPress(el, evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    var number = el.value.split('.');
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    //just one dot (thanks ddlab)
    if(number.length>1 && charCode == 46){
         return false;
    }
    //get the carat position
    var caratPos = getSelectionStart(el);
    var dotPos = el.value.indexOf(".");
    if( caratPos > dotPos && dotPos>-1 && (number[1].length > 1)){
        return false;
    }
    return true;
}

//thanks: http://javascript.nwbox.com/cursor_position/
function getSelectionStart(o) {
    if (o.createTextRange) {
        var r = document.selection.createRange().duplicate()
        r.moveEnd('character', o.value.length)
        if (r.text == '') return o.value.length
        return o.value.lastIndexOf(r.text)
    } else return o.selectionStart
}

document.selection.createRange().duplicate() 不适用于 Angular 6?

标签: javascriptangular6keydown

解决方案


推荐阅读