如何让jQuery验证成功函数来操作隐藏的输入字段?

时间:2010-07-20 00:23:13

标签: javascript jquery validation forms jquery-validate

我有一个由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">&nbsp;</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');
                    }
                },

2 个答案:

答案 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>

希望能帮助别人!