【问题标题】:How to invoke a p:commandButton by JavaScript on enter keypress?如何在输入按键时通过 JavaScript 调用 p:commandButton?
【发布时间】:2011-12-15 09:33:21
【问题描述】:

我在我的页面中写了 a 和 a。 当按下回车键时,我想做任何 js 检查,如果成功发布一个动作。

Javascript:

function text_onkeypress() {
    if(event.keyCode==13){
        formSubmit();
    }
}

HTML:

<p:inputText id="context" value="#{bean.fileName}"
 onkeydown="text_onkeypress();"></p:inputText>
<p:commandButton id="search" value="submit" onclick="return formSubmit();" 
 action="#{action.getResult}" ></p:commandButton>

当我在 javascript 中写 query("#search")[0].click() 时,它可以做检查,但不能做 action="#{action.getResult}"。

我不知道怎么做丢失的动作。

【问题讨论】:

    标签: javascript jsf jsf-2 primefaces


    【解决方案1】:

    从 Javascript 提交表单的最简单方法是为 &lt;p:commandButton&gt; 的 jQuery 对象调用 click() 事件。

    大部分 Primefaces 组件都可以通过声明 widgetVar 属性从 Javascript 访问。此属性创建一个 Javascript 变量。例如。

    <p:commandButton id="search" value="submit" onclick="return formSubmit();" action="#{action.getResult}" widgetVar="searchClientVar" />
    

    我现在可以访问formSubmit 函数中的变量。这个 Javascript 变量有一个名为 jq 的属性,它引用了底层的 jQuery 对象以及可以用来调用点击事件的对象。

    function text_onkeypress() {
      if(event.keyCode==13) {
        searchClientVar.jq.click();
      }
    }
    

    这将调用commandButton 的服务器端action 并在它们通过验证时提交表单值。

    【讨论】:

    • 没有意义,因为当按下enter 键时表单会自动提交...
    • @spauny 我知道,但我将这个模糊的问题解释为“如何从带有 Primefaces 元素的 Javascript 提交表单?”我只是使用 KeyPress 事件作为如何执行此操作的示例,但这可以通过任何 javascript 事件轻松完成。
    【解决方案2】:

    您需要什么样的检查?

    您无需在输入时手动提交(尤其是当您只有一个表单时)。 如果您只想在用户输入内容时提交表单,您可以利用validateLength 标签。

    <h:outputLabel for="firstname" value="Firstname: *" />  
            <p:inputText id="firstname"   
                    value="#{personBean.firstname}"   
                    required="true" requiredMessage="You have to enter your name" label="Firstname">  
                <f:validateLength minimum="2" />  
            </p:inputText>  
            <p:message for="firstname" />
    

    在这里查看演示:http://www.primefaces.org/showcase-labs/ui/pprAjaxStatusScript.jsf

    PS:你用的是什么PF版本?

    【讨论】:

    • 感谢您的回答。如果我想提醒()消息怎么办?
    • @wsxiapiaoxue 您希望在有人在文本字段中键入字符时出现 Javascript 警报?您意识到警报框将从文本框获得焦点吧?
    • @wsxiapiaoxue 显示 javascript 警报不是一个好习惯!这就是为什么您可以实现 primefaces message 组件,或者只使用 required=truerequiredMessage="..." 而不使用 message 组件,并且您的 requiredMessage 仍将显示,通常在文本框的右侧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2014-05-30
    • 1970-01-01
    • 2012-10-20
    • 2020-02-10
    相关资源
    最近更新 更多