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 调用堆栈,您会发现第一次 onblur
由 blur
事件触发,而第二次 - 由focusout
事件。这是一个 jQuery 怪癖。更多关于 here.
您的解决方法可能已经足够好了。但请记住,您并不是真正触发事件,而是直接调用事件处理程序。这仅适用于 PrimeFaces 呈现内联 onblur
处理程序,而不是使用 jQuery.
添加事件处理程序
我有一个非常简单的 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 调用堆栈,您会发现第一次 onblur
由 blur
事件触发,而第二次 - 由focusout
事件。这是一个 jQuery 怪癖。更多关于 here.
您的解决方法可能已经足够好了。但请记住,您并不是真正触发事件,而是直接调用事件处理程序。这仅适用于 PrimeFaces 呈现内联 onblur
处理程序,而不是使用 jQuery.