如何在jquery中键入时自动添加点?

如何在jquery中键入时自动添加点?,jquery,regex,date,textbox,Jquery,Regex,Date,Textbox,我有一个带有日期字段的表单,用户必须在其中键入数字,点将自动格式化值。例如:用户提示056,当他在添加5后按6 a点时。我想以dd.mm.yyyy的格式制作它,但由于它只是文本输入,我现在正在处理它,所以我不必定义这三个属性。到目前为止,我的代码是: $(document).ready(function(){ $('#date').keyup(function(event){ if(event.which >= 37 && event

我有一个带有日期字段的表单,用户必须在其中键入数字,点将自动格式化值。例如:用户提示056,当他在添加5后按6 a点时。我想以dd.mm.yyyy的格式制作它,但由于它只是文本输入,我现在正在处理它,所以我不必定义这三个属性。到目前为止,我的代码是:

    $(document).ready(function(){
        $('#date').keyup(function(event){
        if(event.which >= 37 && event.which <= 40){
           event.preventDefault();
    }
        var $this = $(this);
        var num = $this.val().replace(/,/gi, "").split("").reverse().join("");

        var num2 = RemoveRougeChar(num.replace(/(.{2})/g,"$1,").split("").reverse().join(""));

          console.log(num2)
          $this.val(num2);


        if(convertString.substring(0,4) == ".") {
            return convertString.substring(2, convertString.length)  }
            return convertString;}
$(文档).ready(函数(){
$(“#日期”).keyup(函数(事件){

如果(event.which>=37&&event.which您可以使用我为此编写的脚本:

var dateFormatter = function () {    
    if (!arguments) return;        
    this.dateInputFields = arguments;
    this.isFormatted = false;        

    (function ($) {
        $.fn.getCursorPosition = function () {            
            var input = this.get(0);
            if (!input) return; // No (input) element found
            if (document.selection) {
                // IE
                input.focus();
            }
            return 'selectionStart' in input ? input.selectionStart : '' ||
                Math.abs(document.selection.createRange().moveStart('character', -input.value.length));
        }
    })( jQuery );

    function setEvents() {        
        for (var i = 0; i < this.dateInputFields.length; i++) {
            $(this.dateInputFields[i]).keyup(function (e) {                
                if (e.keyCode == 8 || e.keyCode == 46) return;
                s = e.target.value;
                var caretPos = $(e.target).getCursorPosition();
                if (caretPos == 2) s.length > 2? e.target.value[3] = '.' : e.target.value += '.';
                if (caretPos == 5) s.length > 5 ? e.target.value[5] = '.' : e.target.value += '.';
                if (caretPos == 10) s.length > 10 ? e.target.value[11] = ' ' : e.target.value += ' ';
                if (caretPos == 13) s.length > 13 ? e.target.value[10] = ':' : e.target.value += ':';
            });
        }
        this.isFormatted = true;
    };

    setEvents();
};
var dateFormatter=function(){
如果(!arguments)返回;
this.dateInputFields=参数;
this.isFormatted=false;
(函数($){
$.fn.getCursorPosition=函数(){
var输入=this.get(0);
if(!input)return;//找不到(input)元素
if(文档选择){
//即
input.focus();
}
在input?input中返回“selectionStart”。selectionStart:“”||
Math.abs(document.selection.createRange().moveStart('character',-input.value.length));
}
})(jQuery);
函数setEvents(){
对于(var i=0;i2?e.target.value[3]='。:e.target.value+=';
如果(caretPos==5)s.length>5?e.target.value[5]='。:e.target.value+=';
如果(caretPos==10)s.length>10?e.target.value[11]='':e.target.value+='';
如果(caretPos==13)s.length>13?e.target.value[10]=':':e.target.value+=':';
});
}
this.isFormatted=true;
};
setEvents();
};
将此另存为dateFormatter.js

在html中,在(!)除jquery之外的任何其他脚本之前连接它。 在另一个脚本中,执行所有操作时,只需添加行:

var dtFormat=dateFormatter($selector1、$selector2等)

用选择器更改$selector1(在我的例子中是输入id#changesDate)。您可以传递多个“选择器”参数


示例:

仅供参考:
替换(/(.{2})/g,“$1”)
表示,例如,“将
11
替换为
11
”。谢谢。我照你说的做了,但这把我的其他div搞砸了。例如:我有一个字段,其中只允许数字,即使按了也没有显示字母,现在格式已经不存在了。我怎么能避免这种情况呢?很可能你使用了类名或类似的东西。假设你有,并且你连接了这个脚本,键入:var dtFormat=dateFormatter('input1')这将导致对名为input1的所有字段应用格式设置。请改用ID,或对所有日期输入字段使用不同的名称,如:和var dtFormat=dateFormatter('#myDate1'))Fabjan,你认为你可以用你的脚本制作一个JSFIDLE来格式化focusOut上的值吗?我似乎不太懂。谢谢你,我来看看如何将它调整到我的HTML页面。