【问题标题】:jQuery .datepicker("setDate",newdate) is not triggering onChange nor onSelect eventsjQuery .datepicker("setDate",newdate) 没有触发 onChange 和 onSelect 事件
【发布时间】:2011-10-07 06:16:11
【问题描述】:

日期选择器输入的内容通过“setDate”方法以编程方式更改,我想根据更改的日期值更新输入表单的预览。

“onSelect”事件仅在通过日期选择器 UI 更改日期时触发,而不是在调用“setDate”时触发。

输入的“onChange”事件也没有触发。

现在似乎唯一的方法是每次在“setDate”之后手动调用我的 updatePreview 函数,我必须重新格式化从“getDate”方法获得的日期对象。

有没有更简单的方法?

这是jsFiddle 中的模型。 “以编程方式更改”按钮不会更新预览。

【问题讨论】:

  • 虽然我基本上可以关注您的问题,但在您的问题中添加一些代码会有很大帮助。例如,我不知道您的 updatePreview 函数还在做什么。例如,您可以使用 jsFiddle 创建问题的演示。
  • 好问题,Rots!感谢您在下面对您接受的答案的评论中发布它和您的 jsFiddle 答案。

标签: jquery-ui datepicker


【解决方案1】:

如果我的理解正确,您希望使用以编程方式输入或设置的日期更新一个单独的元素。如果是这样,updating an alternate field preview 已经被烘焙到 jQuery UI Datepicker 中了。

datepicker 小部件似乎只能更新备用 <input> 字段而不是 <div> preview,所以如果您需要它来更新 <div>,那么这个 @987654322 @ 需要更多的工作。

【讨论】:

  • 我注意到如果我将 altField 对象更改为 div,该值仍在设置中。在对 jQuery 代码进行了一些研究之后,我能够注册一个钩子并构造一个回调对象。 updated demo 有点丑,不过好用。
【解决方案2】:

您可以自己触发事件,但通常在 javascript 中设置值不会触发事件。这也适用于 jQuery。 自己触发事件:

$(elem).select(); // for select obviously  
$(elem).change(); // for change

【讨论】:

  • select() 会打开日期选择器对话框,我不希望这样
  • 啊,现在我明白你的意思了(使用 jsFiddle 的东西)。不,我认为没有比直接或间接调用 updatePreview() 方法更好的方法(除了 andyb 的回答)。但是您可以创建一个设置日期的函数,这样您就不必经常重复代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多