【问题标题】:How to disable enter key inside jqueryui datepicker如何在jqueryui datepicker中禁用输入键
【发布时间】:2016-06-18 16:42:54
【问题描述】:

我正在使用 jQueryUI 日期选择器,当用户单击文本框并按下回车键时,当前日期会被填充。我想避免这种情况。我试过这个:

$('#datepicker').on('keypress',  function(e){
    if (e.which == 13) {
        e.preventDefault();
        e.stopPropagation();
        return false; 
    }
});

没有运气

这里是demo的链接https://jsfiddle.net/shalini456/zwjzo175/

【问题讨论】:

标签: javascript jquery jquery-ui


【解决方案1】:

试试这个:

$('#datepicker').keypress(function(e){

    if (e.keyCode == 10 || e.keyCode == 13) //10 is Line Feed and 13 is Carriage Return
        e.preventDefault();

  });

【讨论】:

    【解决方案2】:

    试试这个:

    $("#datepicker").keydown(myfunction); // use keydown
    
    function myfunction(e) {
        if(e.keyCode === 13) {
            e.stopPropagation();
            e.preventDefault();
    
            return false;
        }
    }
    

    【讨论】:

    • 这里不需要严格比较,还是我遗漏了什么?
    • 能否提供jQueryUI datepicker的版本
    • @BhupeshKushwaha 它不起作用,您可以尝试编辑和更新jsfiddle.net/shalini456/zwjzo175/3
    • 你好试试它的工作
    • @BhupeshKushwaha 这对我有用,你应该更新你的答案。但我把它缩短了。看看这个小提琴:jsfiddle.net/zwjzo175/27
    【解决方案3】:

    如果您无法禁用 enter 按键,则可以解决此问题...您可以将焦点从 "#datepicker" 移除,检查以下更新的小提琴 https://jsfiddle.net/shalini456/zwjzo175/4/

    jQuery

    $(document).ready(function(){
        $( "#datepicker" ).datepicker();
    
      $("#datepicker").on('click', function(){
       $("#datepicker").blur();
      });
    
    
    });
    

    【讨论】:

      【解决方案4】:

      我已经缩短了他在 cmets 中提供的 Bhupesh Kushwaha 的解决方案

      $(function() {
          $("input").bind('keydown', function (e) {
          if (event.which == 13) {
          $(this).trigger(e); 
          return false; 
        } 
          }).datepicker(); 
        });
      

      这对我有用:https://jsfiddle.net/zwjzo175/27/

      【讨论】:

      • 这不起作用。代码中有错误(未定义事件)。如果我将“event”替换为“e”,则表示“递归过多”。
      【解决方案5】:

      伙计们,

      我知道这可能为时已晚,但唯一对我有用的解决方案是来自“Charly H”的解决方案,他将绑定输入文本的代码放在日期选择器声明之前。

      我猜原因是气泡的传播和它的优先级。

      代码如下所示:

      $(function() {
          $("input").bind('keydown', function (e) {
              if (event.which == 13) {
                  e.preventDefault();
                  e.stopPropagation();
                  $(this).trigger(e); 
                  return false;
              } 
          }).datepicker(); 
      });

      【讨论】:

      • 调用$(this).trigger(e); 是递归的,会抛出堆栈溢出异常,这就是它有点起作用的原因
      【解决方案6】:

      这里的一些解决方案似乎可以工作,因为它们会抛出某种异常。

      似乎有两件事可以让它在不引发异常的情况下工作。

      正如“Charly H”所说,keydown 绑定必须在调用 datepicker 之前发生。

      然后在 keydown 处理程序中调用e.stopImmediatePropagation()。例如

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

      小提琴:https://jsfiddle.net/8fyvh8wd/18/

      【讨论】:

      • 这个答案是哥谭当之无愧的英雄。
      • 在初始化日期选择器之前绑定 keydown 事件处理程序对我有用。
      猜你喜欢
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多