2013-08-29 116 views
1

我使用jQuery-UI-datepicker.min.js和http://digitalbush.com/projects/masked-input-plugin/一起在输入:jQuery的日期选择器()和掩模()之间的冲突

$("#datepicker").datepicker().mask("99/99/9999");

使用它们一起允许用户任一组日期使用可视化日期选择器或在掩码格式中输入(/和_字符在打字时可见)。

但是,当用户尝试删除文本并清除输入时,它们是冲突的。一旦将日期添加到输入中,如果按下DELETE键然后按ALT键,则删除的文本会回来。因此,用户无法取消由服务器提供或由他自己键入的日期。

我试过.mask(“format”,{completed:function}),datepicker的onClose,$().glassesout()事件。没有任何工作可以捕获文本被删除,并确保它仍然是这样。

+1

'Datepicker'已经提供格式化日期的方法。你为什么需要用'mask'把它搞乱? – mishik

+0

你能提供吗,小提琴,否则我们的答案只会基于假设。 – JonathanRomer

回答

3

哈哈我修好了!

$("#datepicker").datepicker().mask("99/99/9999"); 
    $("#datepicker").keyup(function(e){ 
     if(46==e.keyCode || 8==e.keyCode || 9==e.keyCode){ 
      var $this = $(this); 
      if($this.val() == "__/__/____") 
       $this.val(""); 
     } 
    }); 

每次DELETE,Backspace键(意味着用户要删除吗)或TAB(指用户离开输入),该代码验证是否文本被删除和屏蔽()补充面具的文字,如果是这样就清除那个文本。

据我所知,mask()添加了蒙面文本__/__/____,以便用户可以输入它,但是当datepicker()看到该文本时,它认为它是无效日期并用Now()文本替换它。我的代码拦截它并在datepicker()看到它之前清除该文本。

还存在一个问题,如果用户通过鼠标点击其他地方离开输入,问题有时会发生。我可以尝试focusout()或其他,但我现在不会尝试。