【问题标题】:jQuery conflict between datepicker() and mask()datepicker() 和 mask() 之间的 jQuery 冲突
【发布时间】:2013-08-29 13:21:01
【问题描述】:

我在输入中同时使用 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() 事件。无法捕获已删除的文本并确保它保持原样。

【问题讨论】:

  • Datepicker 已经提供了格式化日期的方法。你为什么要把它和mask搞砸?
  • 你能不能提供,并摆弄,否则我们的答案将只是基于假设。

标签: jquery datepicker mask


【解决方案1】:

哈哈,我修好了!

    $("#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() 添加了掩码文本,如果是则清除该文本。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2012-01-15
    相关资源
    最近更新 更多