当我使用一些像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
作为参数,以便在您打算在其他地方重用它时可以减少样板文件。