重置日期范围限制

我以一种相当复杂的forms使用jQueryUI和datepicker。 我有一组4个日期选择器,它们都相互依赖。 例如,在Datepicker A中选择日期会导致Datepicker B aso的有效日期范围发生变化

使用datepicker的onSelect选项可以轻松实现这一点:

onSelect: function(selectedDate){ //find datepicker B; //edit the valid date range of datapicker B. } 

现在出现了一个有问题的用例:由于不需要这些字段,因此允许用户执行以下步骤:

1)选择日期选择器A中的日期。这将触发onSelect并限制日期选择器B的日期范围.2)改变主意并希望清除日期选择器A中的日期。

步骤2)是有问题的:首先,由于一些不明原因,jQueryUI> 1.7没有明确的按钮。 因此,日期选择器的输入字段必须是可编辑的,甚至允许用户删除(通过使用退格按钮)他之前选择的日期。 也许我可以接受。

但是真正的问题出在这里:用户从输入字段手动删除了他的日期后,我没有勾选我的“重置”logik,即删除之前应用于日期选择器B的限制.onSelect未触发,但是据我所知,其他任何事情都没有。

是重置逻辑的唯一方法,在datepicker输入字段上放置一个模糊监听器,每次检查该值是否为空? 是不是这样,那么我真的认为在datepicker小部件中有一个明确的机制是一个主要的bug。 如果窗口小部件允许我限制其他datepicker窗口小部件的日期,那么它也应该允许我解除这些限制。

免责声明:这篇文章部分与这个问题重复,但唯一的问题是js“hack”无法正常工作(更改月份时清除按钮消失)。 我还从jQuery问题管理中查看了Ticket#3999 。 它被关闭为“wontfix”:/

感谢您的任何帮助。

我不知道日期选择器丢失了“清除”按钮! 我开始研究这个并尝试制作一个不依赖于添加其他元素的解决方案,或者假设用户会知道按Esc会关闭小部件。 虽然您可以向用户提供该function的说明,这可能会解决您的问题;-)

所以我做了一个演示 ,其中我用“清除”替换了“关闭”按钮文本。 我在我的 “清除”按钮上添加了一个额外的jQuery mouseup 委托事件,该按钮将在标准datepicker事件触发之前清除输入。

因此,要么单击“清除”或使用退格键删除日期,然后使用Esc关闭日期选择器,则会将第二个输入恢复为默认的datepicker状态。

请注意,对于此演示,每次在第一个输入中选择日期时,都会设置第二个范围。 这可能不是您想要的function。

希望这是你要找的:-)

编辑: 更新演示啊,是的,这确实让事情变得复杂! 我重新设计了解决方案,使其更具通用性, 我认为我的工作正常。 新演示一次创建所有的datepicker对象。 有一些棘手的部分,即通用清除“下一个” 元素,并正确地确定在按下“清除”按钮时清除哪个 。 我不知道只有一个日期选择器。 所以它有点像黑客,因为它只是在输入上设置一个jQuery .data()属性,使得datepicker可见,然后用它来清除正确的。 请注意,在此演示中,如果清除了一个输出,它仍然会重置所有后续输入,即“清除”第一个清除2和3但清除第二个仅清除第3个输入。

您是否考虑过在datepicker A上观察onClose事件?

 onClose: function(dateText, inst) { if(dateText == '') { //find datepicker B; //reverse the valid date range of datepicker B. } }, 

这是一种黑客行为,但也许它可以做你想要的:

你可以有一个隐藏的输入,上面写着“选择日期”,这是一个布尔值。 当用户选择日期时,您将隐藏输入设置为true

您禁用日期输入。 您添加一个“清除”按钮,将输入设置为false并重置B上的日期约束。

在服务器部分,检查布尔值以查看是否必须处理日期。

以下内容已经过测试和确认

            Changed your mind? - Clear Date