Javascript / Trinidad:autoSubmit on复选框可防止听到键盘事件

时间:2015-06-29 22:00:36

标签: javascript jquery myfaces trinidad

当我的用户按下'输入'点击一个复选框后,我的表单应该像“下一步”一样。按钮被按下了。但是,我正在使用PPR(部分页面呈现),以便在单击它时,我的复选框会触发“下一步”。按钮重新粉刷。这是通过设置autoSubmit =" true"在复选框和按钮上的partialTrigger。

问题是我的组件上的autoSubmit =“true”,javascript / jquery没有“听到”keyup事件。我认为这是因为当具有partialTrigger的按钮时重新粉刷,我的复选框失去了焦点。我已经尝试在onclick方法中重置焦点复选框,但它似乎太早了。我也设置了超时,但这也没有用。我还尝试在复选框的valueChangeListener方法中以编程方式进行javascript调用,但这必须过早启动。有谁知道为什么会这样,我能做什么?

这是代码

$(document).ready(function(){ 
    $("input[id='subview:agree']").keyup(function (event) {
    if (event.keyCode == 13) {      
        processEnterKey();
    }
  });
 }); 

function processEnterKey() {
    $("button[id='subview:btnSubmit']").click();   
}  

复选框:

<tr:selectBooleanCheckbox binding="#{bean.termsOfUseChkBox}"
                          id="agree"
                          autoSubmit="true"
                          simple="true"
                          valueChangeListener="#{bean.agreementChangeListener}"/>                                         /

按钮:

<tr:commandButton id="btnSubmit"
                  disabled="#{!bean.agreementAccepted}"
                  partialTriggers="agree" text="Next"
                  action="#{bean.termsOfUse_action}"
                  partialSubmit="false"
                  onclick="handleLoadingPleaseWait()"
                  blocking="true"/>

以下是我用来尝试将焦点设置回复选框的onclick方法,以便它可以听到&#39;关键:

$("input[id='subview:agree']").click(function (event) {
        if(document.getElementById('subview:agree').checked) {
        setTimeout(function(){document.getElementById('subview:agree').focus();},1000)
        }
 });

这是我在changeListener中输入的服务器端代码:

    FacesContext fctx = FacesContext.getCurrentInstance();
    ExtendedRenderKitService erks = null;

    //compose JavaScript to be executed on the client 
    StringBuilder script = new StringBuilder();
    script.append("document.getElementById(\"subview:agree\").focus();");

    erks = Service.getRenderKitService(
                     fctx, ExtendedRenderKitService.class);
    erks.addScript(fctx, script.toString());

1 个答案:

答案 0 :(得分:1)

如果您想通过按Enter键从每个输入提交表单,只需使用tr:form上的defaultCommand属性。

<tr:form defaultCommand="..."/>

上的文档
  

命令按钮的id属性,默认情况下,在表单的任何输入字段上按Enter键时,将对表单提交操作。

因此,将其设置为btnSubmit应该可以解决问题。

由于这对您的方案没有帮助,您可以尝试在复选框中添加onkeypress属性:

<tr:selectBooleanCheckbox binding="#{bean.termsOfUseChkBox}"
                          id="agree"
                          autoSubmit="true"
                          simple="true"
                          valueChangeListener="#{bean.agreementChangeListener}"
                          onkeypress="if (event.keyCode === 13){ this.click(); }"/>

对我而言,这触发了提交表单。