3

我调用了一个javascript函数,该函数单击隐藏的commandButton,但单击在页面加载时运行,而不是在我调用该函数时运行。这是html代码:

<p:inputText id="aa" value="#{bonBonneManagedBean.sel}" onkeyup="fnc()" />
<h:commandButton id="hh" onclick="#{bonBonneManagedBean.kk()}" style="display:none"/>

和 javaScript 函数:

function fnc()
{
    length = document.getElementById('form:aa').value.length;
    if(length == 10)
    {
        $("#hh").click();
        document.getElementById('form:aa').value = "";
    }
}
4

3 回答 3

7

您应该使用该action属性而不是onclick这样

<h:commandButton id="hh" action="#{bonBonneManagedBean.kk()}" style="display:none"/>

请注意,您可能必须向选择器添加表单前缀,如下所示

$("#myFormId\\:hh").click();

这同样适用于一个commandLink或任何其他“可点击”组件。

于 2013-02-11T13:51:01.813 回答
4

此页面上必须有一个按钮(我怀疑,因为您无论如何都在隐藏它)?使用类似<p:remoteCommand/>这里的东西会更好地为您服务

放弃隐藏按钮并替换为

<p:remoteCommand name="fnc" actionListener="#{bonBonneManagedBean.kk}"/>

但是,如果这是绝对要求,您可以使用click()您需要的函数中的方法非常轻松地模拟 js 中的按钮单击

  1. 将 更改<h:commandButton/>为 a<p:commandButton/>以便您可以为按钮分配一个widgetVar属性(以保证 DOM 中元素的名称)。widgtetVar几乎所有 primefaces 组件都可以设置该属性,让您的生活更轻松

  2. 使用widgetVar,只需调用click()函数中的方法

    <p:commandButton ajax="false" widgetVar="theButton" id="hh" action="#{bonBonneManagedBean.kk()}" style="display:none"/>
    <p:inputText id="aa" widgetVar="theTextBox" value="#{bonBonneManagedBean.sel}" onkeyup="fnc()" />
    

    并在函数中:

     function fnc(){
         length = theTextBox.value.length;
         if(length == 10){
           theButton.click()
            theTextBox.value = "";
               }
             }
    
于 2013-02-11T14:47:03.700 回答
1

如果 Daniel 和 Kolossus 的最佳答案对某人没有帮助:我发现字符被放在了我在案例中设置的 id 前面,因此这对我有帮助:

$('[id$=hh]').click();

Basically the selector is saying the id ends with 'hh' but may not be the full id.
This is also helpful in SF development as the same thing happens with comandButtons, etc.

于 2016-12-12T17:09:15.517 回答