我有一个带有日期字段的表单,用户必须在其中键入数字,点会自动格式化值。例如:用户设置056,当他在添加5之后按下6点时。我想以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;}
当我输入前两位数字时,会在值前面显示逗号,就在输入第三个数字后,将移动逗号。如何编写代码,以便用逗号替换逗号并添加两次:第一个数字后的数字和第二个月后的数字?
答案 0 :(得分:0)
您可以使用我为此目的编写的脚本:
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();
};
将其另存为dateFormatter.js
在你的html之前连接它(!)除了jquery之外的任何其他脚本。 在其他脚本中,你只需添加一行:
var dtFormat = dateFormatter($ selector1,$ selector2等);
用你的选择器改变$ selector1(在我的例子中,它是输入id #changesDate)。您可以传递多个“选择器”参数。