p:ajax 如何获取父元素的js变量?

p:ajax how to get js variable of parent element?

当我使用某些 "simple" 组件时,例如 p:commandButton,在其 javascript 事件处理程序中,我可以引用 "this" 变量:

<p:commandButton type="button" id="qwer" value="OK" onclick="myJsFunction(this)"/>

但是,当我处理 p:ajax 时,这个技巧不起作用,因为 p:ajax 没有被渲染并且没有元素可以从 "this" 引用。问题是从 p:ajax?

调用 js 处理程序时如何获取父元素
<p:commandButton id="qwer" value="OK">
   <p:ajax oncomplete="myJsFunction(this)"/>
</p:commandButton>

我知道我可以只传递父按钮的 ID 而不是用 jquery 找到它,但也许有更好的方法?

oncomplete 在源 HTML DOM 元素的上下文中没有 运行。它没有被重新定位到它的任何 on* 属性。它 运行 在内部 ajax 处理程序的上下文中。在这个上下文中有三个参数可用:xhrstatusargs(每个参数都希望有一个不言自明的变量名)。在 PrimeFaces 5+ 中,源 HTML DOM 元素的客户端 ID 可通过 xhr.pfSettings.source.

获得

所以,总而言之,应该这样做:

<p:ajax oncomplete="myJsFunction(document.getElementById(xhr.pfSettings.source))" />

如有必要,更改 myJSFunction 以将 xhr 作为参数,以便在您打算在其他地方重用时减少样板文件。