停止在beforeShow中显示jquery-ui datepicker

我希望做这样的事情:

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

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

从源头看,目前看起来不太可能。 您可以将其作为function请求。 如果你真的想让它停止(虽然这可能是一个坏主意)你可能会在该函数中抛出一个错误。 虽然这会导致您的页面出现错误,但可能不是一个选项。


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

我有同样的问题,并且发现你现在可以使用return false; 防止日历显示。

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

我正在使用jQuery UI 1.7.2版

使用disableenable方法参数简单地控制datepicker的显示可能会更好。

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

它似乎达到了你所寻求的目的。

防止datepicker打开的最好方法是在beforeShow中使用以下函数:

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

这迫使datepicker在它显示之前关闭。

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

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

由于这个补丁尚未合并,我能够提出一个非常好的黑客攻击。 让我知道你的想法:

 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('') } }