Primefaces 以编程方式触发的事件触发两次

Primefaces programmatically triggered event fires twice

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

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

我想触发由 p:ajax 以编程方式附加的模糊事件处理程序。 这样做,我遇到以下奇怪的行为: 如果我通过在 nativ DOM 元素上调用它来触发事件,如下所示:

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

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

如果我通过调用触发事件:

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

blur 事件触发两次,因此有两个 ajax 请求被发回服务器。

有谁知道,是什么导致了这种奇怪的行为?

如果您查看 PrimeFaces.ajax.Queue.offer 的 JS 调用堆栈,您会发现第一次 onblurblur 事件触发,而第二次 - 由focusout 事件。这是一个 jQuery 怪癖。更多关于 here.

您的解决方法可能已经足够好了。但请记住,您并不是真正触发事件,而是直接调用事件处理程序。这仅适用于 PrimeFaces 呈现内联 onblur 处理程序,而不是使用 jQuery.

添加事件处理程序