1

我在输入中一起使用 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's onClose, $().focusout() 事件。无法捕获已删除的文本并确保它保持原样。

4

1 回答 1

4

大声笑我修好了!

    $("#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() 或其他东西,但我现在不会尝试。

于 2013-08-29T13:46:27.413 回答