【问题标题】:f:ajax don't fired with event "change"f:ajax 不会被事件“change”触发
【发布时间】:2015-03-14 15:56:22
【问题描述】:

代码:

<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>

当我使用日期选择器从 h:inputText 中选择日期时,使用此代码,f:ajax 将触发事件并将此日期填充到 generateDate 组件。 但是当我更改为 multiDatePicker 时,f:ajax 不会用事件“change”触发(虽然它适用于事件“blur”,但我在使用“blur”时遇到了一些问题)。 如何为 multiDatePicker 使用事件“更改”? 另一个问题:jsf 中的标签 h:inputHidden 是否支持 f:ajax?

感谢支持

【问题讨论】:

    标签: ajax jsf datepicker jquery-multidatespicker


    【解决方案1】:

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

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

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

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

    那么你可以如下实现:

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

    【讨论】:

    • 您好 BalusC,当我重新单击选定的日期时,我仍然遇到问题。 EX:我选择三个日期:1,2 和 3,然后我重新单击日期 1,然后触发 ajax 事件,我重新单击日期 2,然后触发 ajax 事件,但是当我重新点击日期 3 时,不会触发 ajax。当我同时重新单击 3 个日期时,结果相同。你能帮忙解释一下这是什么意思吗?
    • 显然值没有改变。
    • 只有最后一个日期ajax没有被触发,其他的都还好。我已经使用查询控制台来检查日期字段的值并且它是空的。我还使用调试来检查 $(this).change() 是否运行。为什么在日期字段为空的情况下不会触发 ajax 事件?
    猜你喜欢
    • 2016-04-29
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多