如何找到widgetVar?

Mat*_*ari 5 javascript primefaces jsf-2

如果我有一个primefaces组件,比如

<p:selectOneMenu id="myComponent">
...
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

在脚本标记内,您可以注意到窗口小部件的名称(如果我不在组件中提供它,它将被生成).我想知道如何获取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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此函数在body的onkeydown事件上执行.这样做的目的是通过tab键替换enter键的默认行为.唯一的问题是,当焦点组件是selectOneMenu并且用户点击进入时,它正确地表现得像tab键,但之前聚焦的selectOneMenu被打开(因为这是组件的默认行为).

所以,我想要做的是调用之前聚焦的组件的selectOneMenu小部件var的close()方法.

Hat*_*mam 9

您可以widgetVar使用这个方便的函数通过id 获取对象:

功能

function getWidgetVarById(id) {
   for (var propertyName in PrimeFaces.widgets) {
     if (PrimeFaces.widgets[propertyName].id === id) {
       return PrimeFaces.widgets[propertyName];
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

用法

getWidgetVarById('myFormName:myComponent');
Run Code Online (Sandbox Code Playgroud)

getWidgetVarById('dialogId').show();
Run Code Online (Sandbox Code Playgroud)

看更多:

  • 此功能现在是PF的一部分。PrimeFaces.getWidgetById(&lt;id&gt;); (3认同)