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

时间:2015-05-11 10:34:42

标签: javascript jquery jsf primefaces

我有一个非常简单的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请求发回服务器。

有谁知道,是什么原因引起这种奇怪的行为?

1 个答案:

答案 0 :(得分:3)

如果你看看PrimeFaces.ajax.Queue.offer的JS调用堆栈,你会看到第一次onblurblur事件触发,而第二次被focusout事件触发onblur 1}}事件。这是一个jQuery的怪癖。更多关于here

你的解决方法可能还不错。但请记住,您并没有真正触发事件,而是直接调用事件处理程序。这只能起作用,因为PrimeFaces呈现内联{{1}}处理程序,而不是使用jQuery添加事件处理程序。