2012-07-19 39 views
6

有没有在JavaScript或jQuery的方式来检测和动态更改,同时键入一个键输入和复制并粘贴到文本框的日期?插入日期时的动态智能日期掩码

我试图创建一个有两位数的函数文本框,如一个月。

由于一个月可以数字1 - 12我要执行的第一个数字是1或0

,我试图然而,这样的伎俩是在文本框中第一如果这个数字是2 - 9,那么获得焦点并且用户要输入一个数字,我想要一个零点自动填充第一个点,然后是第二个点的9。

之前,我键入任何在此日期输入看起来像这样:

__/__/_____ 

如果我键入 “1”

1_/__/_____ 

如果我输入 “2” 应该得到

02/__/_____ 

如果我输入“22”应该得到

02/2_/_____ 

如果我输入“77”应该得到

07/07/_____ 

我将是与代码的答案,或者一个工具,它已经这样做了或链接到以前的帖子的链接很感兴趣?

最终我想把它放在一个蒙面上,所以7/7/2011或7/7/11或07/07/2011将一直填充到07/07/2011。在最终的最终版本中,我试图让今年的默认值达到当前的十年,但是下降到每10年一次。

+2

从最终用户的角度来看,我发现这些类型的东西*非常*令人讨厌。当然,这只是我的看法。我会检查用户体验堆栈交换的最佳方式来提供建议。他们可能已经有了完整的解决方案。 – 2012-07-23 19:51:00

回答

2

为什么不把侦听器附加到文本框的模糊处,而不是用户的输入。

想想用户体验,如果你输入“1”,并且突然间,输入开始在你正在做的事情中增加或删除你正在做的事情的零值?

var dayInput = document.getElementById("day-input"); 
// usually, I'd just use event-listeners, but feel free to refactor 
dayInput.onblur = handleDayOrMonth; 

function handleDayOrMonth() { 
    var el = (this === window) ? event.srcElement : this, 
     number_string = el.value; 

    // checking that it's an actual number 
    if (!isNaN(parseInt(number_string)) { 
     if (number_string.length === 1) { el.value = "0" + number_string; } 
    } 
} 

处理这一年将是一样的,除了你会加入“20”到任何它的开始。

随意jQuery它。

+0

如果输入被屏蔽,用户体验不应受到影响。 RetroCoder 2012-07-19 18:41:51

+1

是的。如果遇到麻烦,理想的体验就是让用户以任何他们想要的方式输入他们的值,然后将其格式化为表单POST的预期结果,并将其格式化回服务器。 只有在以下情况下,才会真正强制这些格式:a)您不会执行隐藏验证,或者b)它是体验的合法部分(例如时钟或计时器上的填充0)。 – Norguard 2012-07-19 18:50:33

+0

我喜欢这个想法。我已经看到了一个扩展视图,就像“缩小”一样,显示了他们在同一时间输入的内容,显示了它如何在缩小的部分中神奇地将其自动格式化。 – RetroCoder 2013-01-04 20:24:20

2

我相信你想要的功能是由jQuery Masked Input plugin

演示提供:http://jsfiddle.net/SO_AMK/SEXAj/

请注意,它也只允许数字字符。

+0

我已经在使用这个javascript了,如果你重新阅读赏金描述的要求应该清楚。 – RetroCoder 2012-07-29 20:51:28

+0

我能够在keydown事件上绑定。感谢jsfiddle。我勉强给你50分。 – RetroCoder 2012-07-31 19:29:42

+0

谢谢。对不起,我没有回应,但我没有更好的解决方案,所以说什么都没有意义:) – 2012-07-31 20:08:18