f:ajax 不触发事件 "change"

f:ajax don't fired with event "change"

代码:

<h:inputText id="date" value="#{holidayRequestController.dates}">
                    <f:ajax execute="date" event="change"
                        listener="#{holidayRequestController.generateDates}"
                        render="generateDate" />
</h:inputText>
<h:panelGroup id="generateDate" class="span8"> ..</h:panelGroup>

使用此代码,当我使用日期选择器 select 来自 h:inputText 的日期时,f:ajax 将触发事件并将此日期填充到 generateDate 组件。 但是当我更改为 multiDatePicker 时,f:ajax 不会触发事件 "change"(尽管它可以与事件 "blur" 一起使用,但我在使用 "blur" 时遇到了一些问题)。 我应该如何为 multiDatePicker 使用事件 "change"? 另一个问题:在 jsf 中是否支持 f:ajax 标签 h:inputHidden?

感谢支持

如果 change 事件实际上没有触发,就会发生这种情况。如果仅通过 JavaScript 而不是通过最终用户交互操作输入元素的值,则可能会发生这种情况。

基本上,当 JavaScript 通过 element.value = newValue 操作值时,并且您希望触发 change 事件,那么 JavaScript 应该显式调用 element.change() 在被操作的输入元素上。

根据 $.multiDatesPicker documentation,您可以使用 onSelect 选项挂钩 select 上的函数。在该函数中,您可以调用 element.change()。因此,给定如下输入:

<h:inputText ... styleClass="multi-dates" />

那么你可以实现如下:

$(".multi-dates").multiDatesPicker({
    onSelect: function() {
        $(this).change();
    }
});