当我的用户按下'输入'点击一个复选框后,我的表单应该像“下一步”一样。按钮被按下了。但是,我正在使用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());
答案 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(); }"/>
对我而言,这触发了提交表单。