【发布时间】:2015-12-30 18:08:44
【问题描述】:
我正在使用 jQuery Mobile 并尝试使用 HTML5 表单字段验证来执行内联表单字段验证。我这样做是因为我真的很喜欢浏览器在气泡中报告问题的方式,而且我认为等到有人填写完表格然后告诉他们出了什么问题,这对用户来说并不友好。这是我的 HTML:
<form id="frmMain" action="#">
<input type="checkbox" data-enhance="false" value="1" id="cbxFB" />
<label for="cbxFB">
<span class="formsubtext">Check this box to use Facebook information to help fill out this registration. Once registered you will be able to use the Facebook login button.</span>
</label>
<label for="tbEmail">*Email</label><input type="email" id="tbEmail" required autofocus placeholder="example@address.com" />
<label for="tbPassword">*Password</label><input type="password" id="tbPassword" required />
<div class="formsubtext" style="margin-top:1px; padding-top:0px; margin-bottom:10px">Minimum of 6 characters, one capital character, and one lower case character.</div>
<label for="tbPasswordConfirm">*Password Confirm</label><input type="password" id="tbPasswordConfirm" required />
<label for="tbPin">*Account Pin</label><input type="password" pattern="[0-9]{4}" id="tbPin" required placeholder="####" />
<div class="formsubtext" style="margin-top:1px; padding-top:0px; margin-bottom:10px">A four digit number that you will remember. This value will be needed to perform sensitive tasks within the application.</div>
<label for="tbFName">*First Name</label><input type="text" id="tbFName" required />
<label for="tbLName">*Last Name</label><input type="text" id="tbLName" required />
<label for="tbPhone">Phone Number</label><input type="tel" id="tbPhone" pattern="\d{3}[\-]\d{3}[\-]\d{4}" placeholder="###-###-####" style="margin-bottom:1px; padding-bottom:0px;" />
<div class="formsubtext" style="margin-top:1px; padding-top:0px; margin-bottom:20px;">Used at your option when you schedule an appointment with a service provider</div>
<div style="display:none;"><label for="tbfbID">Facebook ID</label><input type="text" id="tbfbID" /></div>
<input type="submit" id="btnMainNext" data-icon="arrow-r" data-iconpos="right" value="Next" data-theme="c" class="ui-btn-c ui-btn ui-corner-all" />
</form>
对于确认密码表单字段,我定义了以下事件:
$("#tbPasswordConfirm").on("change", function (event) {
var password = $("#tbPassword").val();
var passwordconfirm = $("#tbPasswordConfirm").val();
if (password != passwordconfirm) {
$("#tbPasswordConfirm")[0].setCustomValidity("The value entered does not match the previous password entered.");
$("#btnMainNext").click();
}
else {
$("#tbPasswordConfirm")[0].setCustomValidity("");
}
$(this).focus().select();
})
我的问题是,当用户在字段中输入内容并移至下一个字段时,HTML 表单验证会显示下一个字段的错误消息(这是必需的)。我希望它显示他们刚刚离开的字段的消息。如何阻止焦点移动到下一个字段,以便显示的气泡消息来自他们刚刚输入数据的字段?如您所见,我尝试设置焦点,但这不起作用。任何帮助将不胜感激。
【问题讨论】:
-
看来你不应该做
$("#btnMainNext").click();为什么不做onkeyup呢? -
而不是
$(this).focus怎么样$('#tbPasswordConfirm').focus() -
@billy 为什么? $(this) 是 #tbPasswordConfirm
-
@mplungjan - 对单击按钮的调用是实际触发表单验证的原因。该按钮是提交按钮,如果您直接调用提交函数,则不会触发验证,因此您必须模拟某人单击提交按钮。
-
@billy - 我已经尝试使用您建议的 ID,但没有成功。
标签: javascript jquery html forms validation