当前位置: 首页 > 面试题库 >

PrimeFaces在按Enter键时禁用提交

慕承允
2023-03-14
问题内容

PrimeFaces在按Enter键时禁用提交。

我正在运行在WildFly 8.2 Final上运行的PrimeFaces 5.1。

我有对话框,有两个inputNumbers和两个按钮。并且第一个inputNumber对ajax模糊事件进行一些计算。按钮旁边是在bean中进行一些计算的按钮。问题是,当用户在焦点位于inputNumber时按Enter时,按钮的动作被触发,这确实很烦人。有没有一种方法可以禁止在对话框上使用Enter键提交?

这是一个小的xhtml对话框,可以模拟我的行为:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:pe="http://primefaces.org/ui/extensions" >

    <p:dialog id="id_example"  header="Test dialog" 
              widgetVar="exampleDialog" modal="true" closable="true" >
        <h:form id="id_example_form">

            <p:panelGrid columns="3" styleClass="noBorders">
                <h:outputText value="Input 1:" />
                <pe:inputNumber id="Input1" value="#{exampleBean.number1}">  
                    <p:ajax event="blur" update="valueInput1" />  
                </pe:inputNumber>

                <p:commandButton value="Check something else" action="#{exampleBean.checkForUsername()}" 
                                 update=":growl_form" />

                <h:outputText value="Input 1:" />
                <p:inputText id="valueInput1" value="#{exampleBean.number1}" />

                <p:commandButton value="Save" action="#{exampleBean.save()}"  oncomplete="PF('exampleDialog').hide();"
                                 update=":growl_form" />
            </p:panelGrid>

        </h:form>
    </p:dialog>
</ui:composition>

和豆:

package si.pucko.beans;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import si.pucko.util.Util;

@Named(value = "exampleBean")
@ViewScoped
public class ExampleBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private BigDecimal number1;

    public ExampleBean() {
        number1 = new BigDecimal(BigInteger.ONE);
    }

    public BigDecimal getNumber1() {
        return number1;
    }

    public void setNumber1(BigDecimal number1) {
        this.number1 = number1;
    }

    public void checkForUsername() {
        Util.ShowWarning("Just testing");
    }

    public void save() {
        Util.ShowWarning("Saved");
    }
}

问题是我不能使用以下命令禁用回车键:

<h:form onkeypress="if (event.keyCode == 13) { return false; }">

因为客户要求热键支持并输入用于提交表单,所以在某些情况下需要重新计算其他一些值,等等。


问题答案:

正如Nimnio引用的答案所说,这特定于HTML和浏览器。

我认为使用PrimeFaces时这种行为是不合适的。对于这样的所有表单,我都希望全局禁用它:

$('form').off('keypress.disableAutoSubmitOnEnter').on('keypress.disableAutoSubmitOnEnter', function(event) {
    if (event.which === $.ui.keyCode.ENTER && $(event.target).is(':input:not(textarea,:button,:submit,:reset)')) {
        event.preventDefault();
    }
});

target检查允许其他默认行为起作用,例如通过按Enter键在文本区域中添加换行符。

为了考虑新添加的表单,您需要在每个AJAX请求之后调用上述脚本。有多种方法可以执行此操作,例如<script>在中的p:outputPanel autoUpdate="true"或在p:ajaxStatusoncomplete回调中调用函数。

如果由于某种原因该解决方案不合适,请考虑本地化的解决方案:

<h:form onsubmit="return false;">

返回false此处将禁用非AJAX默认提交。



 类似资料:
  • 我正在尝试在用户按回车键时提交登录表单。单击“登录”按钮时,表单运行良好,但按回车键不起作用,此外,还会导致奇怪的行为: 未执行由ng submit关联的功能 按enter键后,不再显示错误消息(登录失败) 以下是我的标记: 注意,我尝试替换了<代码> 具有login()函数的相应控制器如下所示: 我运行angularv1.4.0并使用angular-用户界面-router v.0.2.15进行路

  • 在这种特殊情况下,当我按Enter键时,我必须使用哪些选项使这些输入调用函数? Html:

  • 问题内容: 好吧,我试图通过按Enter提交表单,但不显示提交按钮。我不希望尽可能地使用JavaScript,因为我希望所有功能都可以在所有浏览器上正常工作(我知道的唯一JS方式就是使用事件)。 现在,表单如下所示: 哪个效果很好。当用户按下Enter键时,提交按钮将起作用,并且该按钮在Firefox,IE,Safari,Opera和Chrome中不显示。但是,我仍然不喜欢该解决方案,因为很难知道

  • 用AngularJS按回车键提交表单这个问题使用html5按钮,但我使用角度材质按钮作为 但是如何使用它呢

  • 问题内容: 我是Bootstrap的新手,并且一直遇到这个问题。我有一个输入字段,只要输入一个数字,就会调用from函数,但是我希望在输入完整个数字后按“ Enter”键才能调用它。验证功能存在相同的问题-调用时间过早。 问题答案: 根据React Doc的说法,您可以听键盘事件,例如or ,not 。 更新:使用React.Component 这是使用React.Component的代码,它执行

  • 问题内容: 我正在使用Selenium Server(v2.21)和SeleniumJavaClient(v.2.21.0)来自动化Web表单,该表单需要在每次输入后都按下键,因为字段是根据输入的值公开的。因此,根据此处的解决方案,我一直在尝试不同的方法以在表单中输入字符串并按-这是我尝试过的方法: 它会 看起来 像这是最合理的解决方案(),但是编译器抛出,如果你不添加一个错误,因为期待一个字符串