我有一个输入文本字段,当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>