Javascript复制和粘贴没有正确格式化模型值

时间:2016-08-10 20:22:28

标签: javascript angularjs javascript-events frontend javascript-objects

您好我正在制作SSN格式化程序,这是我的代码

            element.keyup(function(event) {
                var inputField = event.target;
                var val = inputField.value.replace(/[^0-9]/g, '');
                var newVal = '';
                if(val.length > 3 && val.length < 6) {
                    newVal += val.substr(0, 3) + '-';
                    val = val.substr(3);
                }
                if (val.length > 5) {
                    newVal += val.substr(0, 3) + '-';
                    newVal += val.substr(3, 2) + '-';
                    val = val.substr(5,4);
                }
                newVal += val;
                inputField.value = newVal;
            })
            .keypress(function(event) {
                if(event.target.value.length === 11) {
                  event.preventDefault();
                }
             });

手动输入数字可以正常工作 当我复制并粘贴一个数字,如12345678901234567890 文本框将其格式化为123-45-6789但是模型值仍然表示它是12345678901234567890,如果我退格从123-45-6789删除一个数字,那么模型值将变为123-45-678

我不确定发生了什么事?是因为keyup事件吗?不确定会不会感激帮助

1 个答案:

答案 0 :(得分:1)

是的,因为keyup事件没有检测到你的粘贴。您应该使用输入事件:

        element.on("input", function(event) {
            var inputField = event.target;
            var val = inputField.value.replace(/[^0-9]/g, '');
            var newVal = '';
            if(val.length > 3 && val.length < 6) {
                newVal += val.substr(0, 3) + '-';
                val = val.substr(3);
            }
            if (val.length > 5) {
                newVal += val.substr(0, 3) + '-';
                newVal += val.substr(3, 2) + '-';
                val = val.substr(5,4);
            }
            newVal += val;
            inputField.value = newVal;
        })
        .keypress(function(event) {
            if(event.target.value.length === 11) {
              event.preventDefault();
            }
         });