【问题标题】:Primefaces programmatically triggered event fires twicePrimefaces 以编程方式触发的事件触发两次
【发布时间】:2015-07-21 19:51:24
【问题描述】:

我有一个非常简单的 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()

一切都很好。 blur 事件仅在只有一个 ajax 请求被发送回服务器时才会触发。

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

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

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

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

【问题讨论】:

  • 您的 HTML 中是否有多个 tbeditorArea
  • 不,只有一个,我已经仔细检查过了。

标签: javascript jquery jsf primefaces


【解决方案1】:

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

您的解决方法可能已经足够好了。但请记住,您并没有真正触发事件,而是直接调用事件处理程序。这只是因为 PrimeFaces 呈现了一个内联的 onblur 处理程序,而不是使用 jQuery 添加事件处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多