当从javascript更改其值时,inputText不会触发ajax更改事件

h:inputText does not fire ajax change event when changing its value from javascript

本文关键字:ajax 事件 javascript 当从 inputText      更新时间:2023-09-26

我有一个输入文本字段,当keyup事件被触发时,它会在javascript函数中改变它的值,还有一个f:ajax应该为change事件:

触发
<h:inputText ... onkeyup="functionThantChangesTextValue(this);">
    <f:ajax event="change" listener="#{someExpensiveCall()}".../>
</h:inputText>
问题是,如果我在javascript functionantchangestextvalue 中以编程方式更改inputText的值,那么ajax不会触发更改事件

我已经试过了:

function functionThantChangesTextValue(field) {
    ...
    field.value = finalValue;
    field.onchange();
}

,在这种情况下,ajax事件触发很好,但我不希望在更改值后立即发生这种情况。我真正想要的是在改变值和失去焦点时执行ajax。

最终我设法找到了使用blur &focus事件。在focus事件上,我使用storeOldValue函数存储旧的inputTextValue值,然后仅当当前输入文本值与旧的文本值不同时,我才在blur事件上执行someExpensiveCall。通过这种方式,我尝试模拟change事件。

<h:inputText ... onkeyup="functionThantChangesTextValue(this);">
    <f:ajax event="focus" listener="#{storeOldValue()}"/>
    <f:ajax event="blur" listener="#{someExpensiveCall()}".../>
</h:inputText>