Primefaces编程触发的事件会触发两次。

4

我有一个非常简单的JSF页面,其中包含以下primefaces元素:

<p:inputText value="#{myBean.myValue}" widgetVar="tbeditorArea">
        <p:ajax event="blur" listener="#{myBean.myListener}"/>
</p:inputText>

我希望能够通过程序触发p:ajax附加的失焦事件处理程序。 然而,这样做会导致以下奇怪的行为: 如果我像这样在原生DOM元素上调用它来触发事件:

PF('tbeditorArea').jq.get()[0].onblur()

一切都很好。模糊事件只有在发送一个ajax请求回服务器后才会触发一次。

如果我通过调用以下方式来触发事件:

PF('tbeditorArea').jq.blur();

模糊事件会触发两次,因此会向服务器发送两个ajax请求。

有人知道是什么原因导致这种奇怪的行为吗?


你的HTML中是否有多个“tbeditorArea”? - Mathew Thompson
不,只有一个,我已经仔细检查过了。 - Dorian Hawkmoon
1个回答

3
如果您查看JS调用堆栈到PrimeFaces.ajax.Queue.offer,您会发现第一次使用blur事件触发onblur,第二次使用focusout事件触发。这是jQuery的一个怪异行为。更详细的信息可以在这里找到。
您的解决方法可能已经足够好了。但请记住,您并没有真正触发事件,而是直接调用事件处理程序。这只能工作是因为PrimeFaces渲染了一个内联的onblur处理程序,而不是使用jQuery添加事件处理程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接