我在数据表的一列中有一个h:commandLink。
JSF
<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}"
rendered="#{routeappcode.edit}"
value="save" onclick="return validateRow(this)"/>
生成的HTML
<a id="routeappcodesummary:summarytable:2:save"
onclick="var cf = function(){return validateRow(this)};
var oamSF = function(){return oamSubmitForm('routeappcodesummary','routeappcodesummary:summarytable:2:save');};return (cf()==false)? false : oamSF();"
href="#">save</a>
Mojarra 1.2_15
<a href="#" onclick="var a=function(){return validateRow(this);};var b=function()
{if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('j_id_jsp_1765393453_2'),
{'j_id_jsp_1765393453_2:j_id_jsp_1765393453_3:0:j_id_jsp_1765393453_7':'j_id_jsp_1765393453
_2:j_id_jsp_1765393453_3:0:j_id_jsp_1765393453_7'},'');}return false};return (a()==false) ?
false : b();">test</a>
这里为onclick生成的javascript封装了JSF标签中提供的脚本。
function validateRow(link){
//link is not a link object but some window object.
var parent = link.parentNode;
}
这里的javascript函数我们没有得到一个链接对象而是一个窗口对象。 原因是JSF标记中提供的脚本已封装,并且由于此的值 参考变化。
如何解决这个问题,以便我可以在脚本中获取链接对象?
使用 onmouseup 在IE 6中无效。
使用JSF 1.2
答案 0 :(得分:0)
不知道为什么JSF会这样做,但这里有一个使用jQuery获取链接的解决方法:
<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}"
rendered="#{routeappcode.edit}"value="save"
onclick="return validateRow($('a[id*=save]')[0])"/>
答案 1 :(得分:0)
您无法为JavaScript函数提供this
的引用,因为onclick
代码将封装在JavaScript函数中。
您可以尝试使用某些JavaScript代码在validateRow()
函数中找到此链接元素,如one proposed by Stig Henriksen。
另一个想法是在链接上添加假 CSS类,并使用此类搜索元素:
<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}"
rendered="#{routeappcode.edit}" value="save"
onclick="return validateRow();" styleClass="saveLink"/>
然后,在你的JavaScript代码中(我在这里使用jQuery,但你可以使用纯JS代码):
function validateRow() {
// We retrieve a jQuery object:
var jQueryObject = $("a.saveLink");
// If you prefer to get a "pure" JavaScript object
var pureJavaScriptObject = $("a.saveLink").get(0);
// continue your work here...
}