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

时间:2015-07-26 07:05:08

标签: jsf primefaces

当我使用像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找到它,但也许有更好的方法?

1 个答案:

答案 0 :(得分:1)

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

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

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

根据需要更改myJSFunctionxhr作为参数,以便在您打算在其他地方重复使用时,可以减少样板。