datepicker()和mask()之间的jQuery冲突

时间:2013-08-29 13:21:02

标签: jquery datepicker mask

我在输入中一起使用jquery-ui-datepicker.min.js和http://digitalbush.com/projects/masked-input-plugin/

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

一起使用它们允许用户使用可视化日期选择器设置日期,或者在屏蔽格式中键入它(/和键入时可以看到_字符)。

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

我尝试过.mask(“format”,{completed:function}),datepicker的onClose,$()。focusout()事件。没有什么能够捕获文本被删除,并确保它保持这种方式。

1 个答案:

答案 0 :(得分: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()添加了掩码文本,如果是,则清除该文本。< / p>

据我所知,mask()添加了屏蔽文本__/__/____,以便用户可以键入它,但是当datepicker()看到该文本时,它认为它是一个无效的日期并将其替换为Now ()文字。我的代码拦截它并在datepicker()看到它之前清除该文本大声笑。

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