如果我有一个primefaces组件,比如
<p:selectOneMenu id="myComponent">
...
</p:selectOneMenu>
在html中,它会生成如下内容:
<div id="myFormName:myComponent" widgetVar="lollipop">
...A lot of things in here...
</div>
<script id="myFormName:myComponent_s">
$(function(){PrimeFaces.cw('SelectOneMenu','lollipop',.......
</script>
在脚本标记内,你可以注意到widget var name(如果我不在组件中提供它,它将被生成)。 我想知道如何获取widget var元素,或者如果这不可能,我怎么能得到那个“”标签,这样我才能得到这个widget var的名字。
------编辑------ 我会试着解释为什么我需要这个。 我有这个功能:
function simulaTabManoBrow(event){
var focusedComponent=document.activeElement;
if(event.keyCode==13){
//Cancel th edefault enter event(submit the form)
event.preventDefault();
event.stopPropagation();
event.returnValue = false;
event.cancelBubble = true;
if((focusedComponent.tagName.toLowerCase()=="input" && focusedComponent.type.toLowerCase()=="button") || focusedComponent.tagName.toLowerCase()=="button"){
//If the focused component is a button, click the button.
focusedComponent.click();
}else{
//Press the tab key programatically
$.emulateTab();
verifyOneMenu(campoFocado);
}
}
}
此函数在body的onkeydown事件上执行。 这样做的目的是通过tab键替换enter键的默认行为。 唯一的问题是,当焦点组件是selectOneMenu并且用户点击进入时,它的行为类似于tab键,但是之前关注的selectOneMenu是打开的(因为这是组件的默认行为)。
所以,我想要做的是调用之前关注的组件的selectOneMenu小部件var的close()方法。
答案 0 :(得分:9)
您可以使用这个方便的函数通过id获取widgetVar
对象:
<强>功能强>
function getWidgetVarById(id) {
for (var propertyName in PrimeFaces.widgets) {
if (PrimeFaces.widgets[propertyName].id === id) {
return PrimeFaces.widgets[propertyName];
}
}
}
<强>用法强>
getWidgetVarById('myFormName:myComponent');
示例强>
getWidgetVarById('dialogId').show();
查看更多内容:
答案 1 :(得分:1)
生成窗口小部件var的算法非常简单:
:
_
例如,如果您的元素的ID为widget_
,则小部件将为main:personal:age
。
组件的JSF id与相应html标签的id属性相同。
答案 2 :(得分:1)
自PrimeFaces 5.3起,您可以轻松做到:
PrimeFaces.getWidgetById(domElementId);
答案 3 :(得分:0)
在PrimeFaces 6.1中,您可以找出由以下规则指定的widgetVar。它与上面显示的示例类似,但在PrimeFaces的更高版本中,它们似乎包含表单ID。
例如:
"widget_" + <form id> + "_form_" + <selectBooleanCheckbox id>
注意:在我的情况下,ID有破折号。破折号转换为下划线。如上所示,它也可能与冒号的转换相同。
例如,您有:
<h:form id='my-page'> and <p:selectBooleanCheckbox id='the-checkboxes'>
widgetVar将是:
"widget_my_page_form_the_checkboxes"
查看您的页面来源以进行验证。
现在获取对象,然后点击它......
P('widget_my_page_form_the_checkbox').click();