我有一个非常简单的JSF页面,其中包含以下的primefaces元素:
<p:inputText value="#{myBean.myValue}" widgetVar="tbeditorArea">
<p:ajax event="blur" listener="#{myBean.myListener}"/>
</p:inputText>
我想以编程方式触发由p:ajax附加的blur事件处理程序。 这样做,我遇到以下奇怪的行为: 如果我通过在nativ DOM元素上调用它来触发事件,如下所示:
PF('tbeditorArea').jq.get()[0].onblur()
一切都很好。只有一个ajax reqest被发送回服务器时才会触发blur事件。
如果我通过以下方式触发事件:
PF('tbeditorArea').jq.blur();
模糊事件触发两次,因此会将两个ajax请求发回服务器。
有谁知道,是什么原因引起这种奇怪的行为?
答案 0 :(得分:3)
如果你看看PrimeFaces.ajax.Queue.offer
的JS调用堆栈,你会看到第一次onblur
被blur
事件触发,而第二次被focusout
事件触发onblur
1}}事件。这是一个jQuery的怪癖。更多关于here。
你的解决方法可能还不错。但请记住,您并没有真正触发事件,而是直接调用事件处理程序。这只能起作用,因为PrimeFaces呈现内联{{1}}处理程序,而不是使用jQuery添加事件处理程序。