当我使用像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找到它,但也许有更好的方法?
答案 0 :(得分:1)
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
作为参数,以便在您打算在其他地方重复使用时,可以减少样板。