何时在angularJS

时间:2016-10-31 06:03:33

标签: angularjs

我正在使用ngModelController使用input元素进行格式化。但是,如果用户试图在开头或中间输入任何数字,我就无法设置插入位置。因为插入符号总是跳到最后。

调用设置光标的最佳位置是什么?

ngModelController.$parsers.unshift(function (viewValue) {
                var plainNumber = viewValue.replace(/ /g, '');
                // $log.info(`viewValue = ${viewValue}`);
                console.log(`$modelValue = ${ngModelController.$modelValue} | $viewValue = ${ngModelController.$viewValue}`);
                console.log(`cursorPos = ${cursor.getCursorPos(elem[0])}`);
                var newVal = ""
                for (var i = 0; i < plainNumber.length; i++) {
                    if (i === 3 || i === 6) {
                        newVal += " ";
                    }
                    newVal += plainNumber[i];
                }

                cursor.setCursorPos(cursor.getCursorPos(elem[0]) + 1, elem[0]);

                // $log.info(`newVal = ${newVal}`);
                elem.val(newVal);
                return plainNumber;
            });

1 个答案:

答案 0 :(得分:0)

类似的问题:

Preserving cursor position with angularjs

但是我添加了以下代码,可能对其他人有用。

    ngModelController.$parsers.unshift(function (viewValue) {
        var plainNumber = viewValue.replace(/ /g, '');
        // $log.info(`viewValue = ${viewValue}`);
        console.log(`$modelValue = ${ngModelController.$modelValue} | $viewValue = ${ngModelController.$viewValue} | viewValue = ${viewValue} | cursorPos = ${cursor.getCursorPos(elem[0])} | oldVal = ${oldVal}`);
        var newVal = ""
        for (var i = 0; i < plainNumber.length; i++) {
            if (i === 3 || i === 6) {
                newVal += " ";
            }
            newVal += plainNumber[i];
        }

        if(newVal === viewValue) {
            return viewValue;
        }

        // $log.info(`newVal = ${newVal}`);
        var lastCursorPos = cursor.getCursorPos(elem[0]);
        elem.val(newVal);
        ngModelController.$setViewValue(newVal);
        ngModelController.$render();

        //cursor.setCursorPos(cursor.getCursorPos(elem[0]) + 1, elem[0]);
        elem[0].setSelectionRange(lastCursorPos + 1, lastCursorPos + 1);
        oldVal = newVal;

        return plainNumber;
    });