如何重置qTip2验证?

时间:2012-09-07 23:59:32

标签: validation jquery-validate qtip2

我在ASP.Net MVC项目中有一个表单,我在其中使用qTip2来显示验证错误。在该表单上,我还根据使用单选按钮进行的​​选择激活/取消激活文本字段。当不使用字段时,我将其设置为disabled ="禁用"属性。这确保了这些字段的客户端验证(jQuery不显眼验证)也被停用。现在,我想知道如何重置qTip2"起泡"对于被禁用的字段。

我们说我有单选按钮1和2分别启用文本框A和B.我们还说默认选择单选按钮1,并且当选择相应的单选按钮时,文本框A和B是必填字段。如果我按下“提交”按钮而不填写任何文本字段,则在文本框A旁边会出现一个qTip错误气泡。现在,如果我按下单选按钮2,我必须清除该气泡,禁用文本框A及其验证,然后启用文本框B及其验证。但是,如果我在此处按提交而不填写文本框B,则不会出现错误提示,并且表单未提交。

我尝试了以下命令的各种组合来完成此任务,但随后验证错误被完全禁用:

$('.qtip').remove();
$('.qtip').hide();
$("input.input-validation-error").removeClass("input-validation-error"); // watch out for the error message labels or they won't go away
$('form').data('validator').resetForm();
$("form").validate().form();

无论单击单选按钮并禁用/启用正确的文本框后执行这些命令的组合,qTip气泡消失,但即使单击“提交”按钮也不会再出现,其他错误应该出现在表格上。

我可能没有使用正确的命令来重置qTip验证气泡。

1 个答案:

答案 0 :(得分:0)

好的,我在发布问题后立即找到了解决方案。我使用了本页http://johnculviner.com/?tag=/unobtrusive-validation-reset中提出的解决方案,我修改了一下。我添加了以下行:$ form.find(' input')。qtip(' destroy');

它给出了这个:

//Taken from: http://johnculviner.com/?tag=/unobtrusive-validation-reset
(function ($) {
    $.fn.resetValidation = function () {
        var $form = this.closest('form');

        //Destroy qTip error bubbles (http://craigsworks.com/projects/forums/thread-using-qtip-with-jquery-validation-framework)
        //$form.find('input:not(.errormessage)').qtip('destroy');
        $form.find('input').qtip('destroy');

        //reset jQuery Validate's internals
        $form.validate().resetForm();

        //reset unobtrusive validation summary, if it exists
        $form.find("[data-valmsg-summary=true]")
            .removeClass("validation-summary-errors")
            .addClass("validation-summary-valid")
            .find("ul").empty();

        //reset unobtrusive field level, if it exists
        $form.find("[data-valmsg-replace]")
            .removeClass("field-validation-error")
            .addClass("field-validation-valid")
            .empty();

        return $form;
    };

    //reset a form given a jQuery selected form or a child
    //by default validation is also reset
    $.fn.formReset = function (resetValidation) {
        var $form = this.closest('form');

        $form[0].reset();

        if (resetValidation == undefined || resetValidation) {
            $form.resetValidation();
        }

        return $form;
    }
})(jQuery);

然后当单击一个单选按钮时,我调用$(" form")。resetValidation();在启用/禁用适当的字段后。