【问题标题】:Stop jquery-ui datepicker from showing in beforeShow阻止 jquery-ui datepicker 在 beforeShow 中显示
【发布时间】:2011-07-06 15:30:06
【问题描述】:

我想做这样的事情:

var showme = false;

$('#mydatepicker').datepicker({
    beforeShow: function(input, inst) {
        if(!showme) {
            //stop showing
        }
    }
});

但禁用,也隐藏似乎工作。我想做一些类似于 preventDefault 的事情,但我认为在这种情况下它不会起作用。

【问题讨论】:

    标签: jquery jquery-ui-datepicker


    【解决方案1】:

    我也有同样的问题,发现您现在可以使用return false; 来阻止日历显示。

    $('#mydatepicker').datepicker({
        beforeShow: function(input, inst) {
            if(!showme) {
                return false;
            }
        }
    });
    

    我正在使用 1.7.2 版的 jQuery UI

    【讨论】:

    • 酷,你用的是哪个版本的jquery/jquery-ui,供以后参考?
    【解决方案2】:

    查看源代码,目前看来这是不可能的。您也许可以要求将其作为一项功能。如果您真的想让它停止(尽管这可能是个坏主意),您可能会在该函数中抛出错误。虽然这会导致您的页面出现错误并且可能不是一个选项。


    注意:我为此提交了一个补丁,它现在在已发布的 jQuery UI 中(至少 v1.9 及更高版本),尽管文档没有提及它。 beforeShow 中的 return false 将阻止日期选择器出现(现在)。

    【讨论】:

    • 感谢@joekarl,我可能会向 ui 团队推荐它。有趣的想法 abotu 抛出一个错误......这很有趣,我以为我早些时候设法找到了解决方案,但这是因为我的代码错误,我错误地抛出了一个错误 :-)
    • 我实际上只是为此做了一个补丁,在 github 上发送了一个拉取请求,但我怀疑它会很快通过......
    • 已经合并到master中,不知道下一个稳定版本是什么时候。提交 d1462973
    【解决方案3】:

    使用 disableenable 方法参数简单地控制日期选择器的显示可能会更好。

    $('#mydatepicker').datepicker('disable'); //Don't show datepicker 
    
    $('#mydatepicker').datepicker('enable'); //Show datepicker
    

    它似乎可以实现您所寻求的相同目的。

    【讨论】:

    • 感谢@Adam Prax 的好建议,但不幸的是它在 beforeShow 中不起作用。我想在它显示之前做一些验证。我几乎需要一个 beforeBeforeShow 事件:-)
    • 我使用了这个解决方案。但是,它需要在 beforeShow 函数之外进行检查。亚历克斯,如果您可以在此方法之外进行相同的检查,它可能对您有用。在我的情况下,它确保在我允许使用日期选择器之前检查了一个复选框。在那之后使用“启用”和“禁用”来阻止选择器显示是相当直接的。
    【解决方案4】:

    防止日期选择器打开的最好方法是在beforeShow中使用如下函数:

    $("#datepicker").datepicker("close");

    这会强制日期选择器在显示之前关闭。

    【讨论】:

      【解决方案5】:

      似乎也是我能得到的最接近的,但我真的不想在这里使用 setTimeout,这似乎有点 hacky:

              var showme = false;
      
              $('#mydatepicker').datepicker({
                  beforeShow: function (input, inst) {
      
                      if (!showme) {
      
                          setTimeout(function () { $(input).datepicker("hide"); }, 1);
      
                      }
                  }
              });
      

      【讨论】:

        【解决方案6】:

        由于尚未合并此补丁,因此我能够想出一个运行良好的 hack。让我知道你的想法:

        beforeShow: function(){
            var start = $('#dtFrom').val()
            if($.trim(start)!=''){
                start = $('#dtFrom').datepicker('getDate');
                $('#DateToDisplay').datepicker('option', 'minDate', new Date(start.getTime()));
            }
        },
            onClose: function() {
            var start = $('#dtFrom').val()
            if($.trim(start)==''){
                alert('Error! Please select a start date\/time prior to setting the date to display.');
                $('#DateToDisplay').val('')
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-10
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-25
          相关资源
          最近更新 更多