在JQuery ui datepicker中禁用enter键

时间:2013-02-11 08:33:40

标签: jquery jquery-ui uidatepicker keyboard-events

JQuery UI datepicker似乎存在一个错误,当用户手动输入日期并点击输入时,datepicker关闭但焦点停留在该字段上,因此日历将不再打开,直到文本框失去焦点并获得它再次。 我如何抑制回车键行为?或者这个看似已知的错误还有其他已知的解决方案吗? 谢谢!

修改

在完成这项工作之后,这是我提出的解决方案:

$('#someid').bind('keydown', function(event) {

    if (event.which == 13) {var e=jQuery.Event("keydown");
                    e.which = 9;//tab 
                    e.keyCode = 9;
                    $(this).trigger(e);
                    return false;
                }
            });

tab键效果很好,可以防止datepicker的输入键事件的默认行为,例如在某些情况下选择今天的日期。

5 个答案:

答案 0 :(得分:6)

我最初在应用您的解决方案时遇到了问题。我认为有必要发布我的更大的代码片段,以提供更多的背景。

if (!Modernizr.inputtypes.date) {
    //use modernizer to weed out browsers that already have a timepicker 
    //http://stackoverflow.com/questions/11297827/html5-date-input-type-interfering-with-jquery-datepicker

    $("input[data-val-date]")
                    .bind('keydown', function (event) {  // BEGIN APPLYING NinaNa's S.O. ANSWER
                    if (event.which == 13) {
                        var e = jQuery.Event("keydown");
                        e.which = 9;//tab 
                        e.keyCode = 9;
                        $(this).trigger(e);
                        return false;
                    }
    }).datepicker({ dateFormat: 'mm/dd/yy' }); //THEN APPLY JQUERY UI FUNCTIONALITY


}

答案 1 :(得分:3)

试试这个

$(document).keydown(keyDownHandler); // use appropriate selector for the keydown handler

function keyDownHandler(e) {
    if(e.keyCode === 13) {
        e.stopPropagation();
        e.preventDefault();

        return false;
    }
}
我认为

e.stopPropagation可以防止冒泡,e.preventDefault可以防止默认行为,也可以返回false。

您应该了解最有效的方法:keyUpkeyDownkeyPress

答案 2 :(得分:2)

通过向datepicker的onClose方法添加blur()事件来解决。

答案 3 :(得分:1)

最简单的方法是像往常一样在<input>上实例化datepicker,然后自己摆脱焦点处理程序并用点击处理程序替换它。

答案 4 :(得分:0)

使用e.stopImmediatePropagation(),并确保在调用datepicker()之前进行了keydown绑定。

  $('input').on('keydown', function(e) {
      if (e.which == 13)
          e.stopImmediatePropagation();
  }).datepicker();

Credit