我有一个由jQuery.validate验证的表单。使用errorPlacement选项我有一组自定义函数用于实时错误验证。使用成功选项我有一组自定义函数来摆脱和替换错误消息。
除非我对隐藏字段的验证仅适用于提交,否则一切都很有效。使用成功选项,jQuery.validate对除了隐藏字段之外的所有其他字段执行完美。我正在使用隐藏字段来合并来自多个文本框和复选框的值。这里有一个关于我的困境的例子,有三个生日字段:日,月,年:
HTML:
<label for="birthmonth">Birthdate</label></div>
<div class="birthfield1"><input type="text" id="birthmonth" name="birthmonth" class="ignore" /></div>
<div class="birthfield23"><input type="text" id="birthday" name="birthday" class="ignore" /></div>
<div class="birthfield23"><input type="text" id="birthyear" name="birthyear" class="ignore" /></div>
<div class="errorparent"><input id="birthdate" name="birthdate" type="hidden" /><div class="norederrorx errordetails2"> </div></div>
用于更新隐藏生日日期字段的jQuery / javascript:
$('#birthday,#birthmonth,#birthyear').change(function() {
var inputbirthday = $('#birthday').val();
var inputbirthmonth = $('#birthmonth').val();
var inputbirthyear = $('#birthyear').val();
if (inputbirthday && inputbirthmonth && inputbirthyear) {
alert('all values');
$('#birthdate').val($('#birthday').val()+'/'+ $('#birthmonth').val()+'/'+ $('#birthyear').val());
}
if (inputbirthday == "" || inputbirthmonth == "" || inputbirthyear == ""){
$('#birthdate').val('');
}
});
jQuery.validate成功选项代码(有效:
success: function() {
if (elementholder.hasClass('ignore') == false) {
errorspotholder.find('.rederrorx').removeClass('rederrorx').addClass('norederrorx');
}
},
答案 0 :(得分:1)
我的用例有点不同,因为我没有使用自定义处理程序来获得成功。但是,我遇到了一个问题,即隐藏字段更改后错误不会消失。我所说的是我正在使用默认的错误和成功功能,但应该没有任何区别 - 你的处理程序应该仍然运行。
似乎最简单的方法是调用.form()方法。因此,在填充(或清空)隐藏输入的事件中,我只是这样:
input.parents('form').validate().form();
输入是来自事件的$() - ized元素,然后我向上遍历以获取表单(验证器附加到其中),然后是验证器,然后调用.form()。这将重新测试表单,在适用的情况下清除/添加错误,但不提交。
希望有所帮助, 詹姆斯
答案 1 :(得分:0)
好的......这个没有答案......
但我很确定它是jQuery.validate的缺失功能(隐藏字段中的更改不会触发成功和errorPlacement事件)。我通过复制成功的代码和jQuery更改事件中的errorPlacement来解决这个问题,如下所示:
$('#chboxterms').change(function() {
if ($('#chboxterms').is(':checked')) {
//replicate jQuery.validate "success" code here
} else {
//replicate jQuery.validate "errorPlacement" code here
}
}
如果您正在使用动态事件和错误消息,那么您可能需要将该代码替换为与您正在编码的$('selector')相关的静态替代。< / p>
希望能帮助别人!