【发布时间】:2013-12-13 20:33:27
【问题描述】:
我有一个电子邮件地址的表单输入,如下所示。在这种特殊情况下,我希望允许用户根据需要更改他们当前的电子邮件地址。当表单加载时,我将他们当前的电子邮件列为默认值。 onblur 如果 value='' 然后我再次将值重置为默认值。
它按预期工作,但有一个例外。如果您清除该值,因此没有电子邮件...所需的验证启动(在这种情况下,消息“需要电子邮件”)按预期进行,并且当您 onblur 替换默认值时,但错误消息仍然存在,直到您再次 onfocus 和 onblur。
html 示例输入
<div class="col-md-6 form-group">
<label><b>Email</b></label>
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-envelope fa-fw"></i>
</span>
<input class="form-control" type="text" name="email" value="<?php echo $_SESSION['account']['account_email']; ?>" onblur="if(this.value == '') { this.value='<?php echo $_SESSION['account']['account_email']; ?>'}"/>
</div>
<span class="help-block"></span>
</div>
验证
$('#account-info-form').validate({
errorElement: 'span', //default input error message container
errorClass: 'help-block', // default input error message class
focusInvalid: false, // do not focus the last invalid input
rules: {
email: {
required: true,
email: true
}
},
messages: {
email: {
required: "Email is required.",
email: "Enter a valid email address."
}
},
highlight: function (element) { // hightlight error inputs
$(element)
.closest('.form-group').addClass('has-error'); // set error class to the control group
},
success: function (label) {
label.closest('.form-group').removeClass('has-error');
label.remove();
},
errorPlacement: function (error, element) {
error.insertAfter(element.closest('.input-group'));
}
});
编辑:
为了更清楚地说明这一点。输入被赋予默认值="something"。如果用户要擦除该值并且该输入失去焦点,则默认值将返回到该输入。这工作如上所示,但错误字段仍然显示。我只能假设这是因为它在我的 onblue 替换默认值之前已经过验证。为了支持这一点,您可以重新关注该值,然后再次关注,错误就会消失。
我想完成类似的事情:
if (inputvalue == ''){
inputvalue = defaultvalue; // if it was supplied in html (either way it would not matter as ifit wasn't it would just stay blank)
now perform validation so the field is not tagged as an error since the original valid value was replaced to due being blank
}
解决方案:(感谢 Sparky)
使用 jquery 我可以完成默认值总是在空白输入时被替换(用户删除表单加载时的默认值)。他们还可以更改课程的值,并且将应用正常的验证规则,例如电子邮件、必填等。
我稍微修改了解决方案,使其更普遍地用于多个输入。
<input class="form-control" type="text" name="lname" data-default="true" value="this is the default value" />
注意添加了 data-default="true"。然后在 validate() 处理程序之外的 jquery 中...
$('input[data-default="true"]').on('blur', function() {
if ( $(this).val() == '' ) { // values is blank from being deleted by user
$(this).val( this.defaultValue ); // set it back to default
$(this).valid(); // trigger validation after setting default back (remove incorrect errors assuming default value is valid)
}
});
【问题讨论】:
-
您只是描述了当前的行为。你还没有解释你想要它做什么。默认情况下,jQuery Validation 插件的验证例程由多个事件触发……在字段模糊、字段内的每次击键以及单击提交时。要回答您的问题,我们必须准确了解您希望触发验证的事件,然后我们才能决定修改哪个回调函数。
-
如果你看,我解释得很清楚。请阅读第二段。焦点后输入的错误消息不应保留,因为发生这种情况时,我会用原始默认值填充空白。如果有办法在验证之前在空白处添加我的默认值,我相信这会解决问题。
-
I'm very experienced with this plugin 如果它“完美”清晰,就不会要求您提供更好的解释。所以请稍微缓和一点态度......没有人会为了惹恼你而要求澄清。毕竟,只要您花时间清楚简洁地了解您想要做什么,您就可以获得免费帮助。
-
这里没有态度...把它归结为网络的一个错误...别人如何阅读您的文字而不总是您如何说它们。我现在来看看这个。与往常一样,提前感谢您的帮助和时间。