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 处理程序的上下文中。在这个上下文中有三个参数可用:xhr
、status
和 args
(每个参数都希望有一个不言自明的变量名)。在 PrimeFaces 5+ 中,源 HTML DOM 元素的客户端 ID 可通过 xhr.pfSettings.source
.
获得
所以,总而言之,应该这样做:
<p:ajax oncomplete="myJsFunction(document.getElementById(xhr.pfSettings.source))" />
如有必要,更改 myJSFunction
以将 xhr
作为参数,以便在您打算在其他地方重用时减少样板文件。
当我使用某些 "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 处理程序的上下文中。在这个上下文中有三个参数可用:xhr
、status
和 args
(每个参数都希望有一个不言自明的变量名)。在 PrimeFaces 5+ 中,源 HTML DOM 元素的客户端 ID 可通过 xhr.pfSettings.source
.
所以,总而言之,应该这样做:
<p:ajax oncomplete="myJsFunction(document.getElementById(xhr.pfSettings.source))" />
如有必要,更改 myJSFunction
以将 xhr
作为参数,以便在您打算在其他地方重用时减少样板文件。