【问题标题】:Add further event handler to jquery datepicker month drop-down将进一步的事件处理程序添加到 jquery datepicker 月份下拉列表
【发布时间】:2012-06-22 20:21:57
【问题描述】:

如果当月没有航班,我被要求从 jQuery 日期选择器的月份下拉菜单中删除月份。我最初的想法是,在 beforeShow 事件中,向 year 下拉列表添加一个更改事件处理程序,该处理程序将关闭并调用一个名为 monthHasFlights( ) 为当年的每个月(第一次加载日期选择器时手动调用它)。如果 monthHasFlights() 返回 false,我将删除该月。 问题是 ...我的处理程序不会附加。

所以,在 beforeShow 事件处理程序中我有这个:

$('.ui-datepicker-year').change(function(){setDropdownMonths()});

但事件永远不会附加,即使我看到这一行在 firebug/tools 中执行我对 jQuery 事件绑定的理解是,您可以根据需要多次分配更改事件,并且处理程序将按照您的顺序触发创建它们..但我想我错了?只是当我尝试附加事件处理程序时下拉菜单还不存在吗?我确实尝试了 100 的 setTimeout,但我的事件仍然没有附加。任何建议表示赞赏。

【问题讨论】:

  • 在使用数据选择器的地方发布您的 HTML 代码以及 JQuery 初始化代码。创建 jsfiddle.com 示例的最佳方式
  • 日期选择器附加到具有 css 类“datepickerOut”的文本框,因此:$('.datepickerOut').datepicker(dpOpts); 其中 dpOpts 是 JSON 样式的选项集合。

标签: jquery events select datepicker handler


【解决方案1】:

可能的问题:您尝试在 datepicker 初始化之前对其进行更改。 我想,完成任务的最佳方法是将函数调用添加到初始化datapicker 的代码中。

此外,.change 事件将在其附加的元素更改其状态时触发。我看不到您的 HTML 和 JQuery 代码可以肯定地说,但可能由于这个问题,该事件不会触发。

$('.ui-datepicker-year')你确定你的HTML中有CLASS,而不是这个元素的ID吗?


更新: 我在 datapicker 中找到了可以帮助您的事件:

beforeShow      function(input, inst)

可以是一个函数,它接受一个输入字段和当前的日期选择器实例,并返回一个选项对象来更新日期选择器。在显示日期选择器之前调用它。 代码示例

提供一个回调函数来处理 beforeShow 事件作为初始化选项。

$('.selector').datepicker({
   beforeShow: function(input, inst) { ... }
});

因此,您可以使用事件初始化数据选择器来调用您的函数,该函数将从列表中排除空月份!

【讨论】:

  • 感谢您的意见。我看到代码尝试附加处理程序,并且在 UI 中,我单击选择以更改年份下拉列表中的值,以便触发任何事件。可能是选择对象尚未添加到 DOM 中...??但肯定 setTimeout 会解决这个问题。
  • 是的,呈现的 html 是:'<select class="ui-datepicker-year"
  • 我发现了一个有趣的数据选择器事件,它可以帮助你——看看我更新的 unswer
  • 实际上可行。年月下拉菜单重新渲染日历,所以我可以使用 beforeShow(其中已经有大量代码!)来测试空月。将发布结果...
  • 不好...当我在下拉菜单中更改月份或年份时,不会触发 beforeShow。日历会重新绘制,但不会从头开始重新初始化。所以我仍然需要将我的处理程序附加到下拉列表的 onchange 上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多