2011-07-17 183 views
2

datepicker输入的内容通过“setDate”方法以编程方式更改,我想根据更改的日期更新输入表单的预览值。jQuery .datepicker(“setDate”,newdate)不会触发onChange或onSelect事件

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

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

现在看来唯一的办法就是手动每次打电话给我updatePreview功能“的setDate”之后,我必须重新格式化日期对象我从“GETDATE”的方法得到。

有没有更简单的方法来做到这一点?

以下是jsFiddle中的样机。 “以编程方式更改”按钮不会更新预览。

+0

虽然我可以主要关注你的问题,但向你的问题添加一些代码会有很大帮助。例如,我不知道你的_updatePreview_函数在做什么。例如,您可以使用[jsFiddle](http://jsfiddle.net/)为您的问题创建演示。 – andyb

+0

伟大的问题,Rots!感谢您将jsFiddle和您的jsFiddle回复发表在对您接受的答案的评论中。 – veeTrain

回答

2

如果我理解正确,要更新的日期一个单独的元素被输入或编程设置。如果是这样,updating an alternate field预览已经烧入jQuery UI Datepicker中。

的日期选择控件似乎只能够更新备用<input>领域,而不是一个<div>预览虽然,所以如果你需要它来更新<div>那么这demo将需要更多的工作。

+2

我注意到,如果我将altField对象更改为div,该值仍在设置中。在jQuery代码中挖掘了一下之后,我能够注册一个钩子并构建一个回调对象。 [更新演示](http://jsfiddle.net/bV5fu/1/) 这有点难看,但嘿它有效。 – Rots

2

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

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

select()打开日期选择器对话框,我不想那个 – Rots

+0

啊,现在我明白你的意思了(用jsFiddle事物)。不,我认为没有比直接或间接调用updatePreview()方法更好的方法(除了什么andyb回答)。但是你可以设置日期的功能,这样你不必经常重复代码。 – Johan