1

我正在使用 jquery.validate 在提交到服务器之前验证客户端的一些输入字段。效果很好!这组特定的字段出现在一个模式中,页面上还有两个其他模式在不同时间弹出,具体取决于用户点击的内容;但是,我的验证仅在其中一个模式上进行,即使该模式不在屏幕上,它也会阻止我的服务器端提交。

下面是我在 .js 中用于模态处理的代码,我要抑制的是“modalChgPass”。

(function (window) {
    var
   $ = window.jQuery,
   modalEdit = '#modal-preferences-edit',
     modalPreferencesEditOpts = {
         autoOpen: true,
         modal: true,
         resizable: false,
         draggable: false,
         width: '700',
         height: '670',
         dialogClass: 'modal',
         appendTo: 'form',
         close: function () { $(this).dialog('destroy'); }
     };



    modalChgPass = '#modal-password-change',
    modalPasswordChangeOpts = {
        autoOpen: true,
        modal: true,
        resizable: false,
        draggable: false,
        width: '450',
        height: '550',
        dialogClass: 'modal',
        appendTo: 'form',
        close: function () { $(this).dialog('destroy'); }
    };


    modalActive = '#modal-card-activate',
    modalCardActivateOpts = {
         autoOpen: true,
         modal: true,
     resizable: false,
     draggable: false,
     width: '700',
     height: '265',
     dialogClass: 'modal',
     appendTo: 'form',
     close: function() { $(this).dialog('destroy'); }
    };



    $(document).ready(function () {
        $('#btn-modal-password-change').click(function () {
            $(modalChgPass).dialog(modalPasswordChangeOpts);
            $(modalChgPass).dialog('open');
            $('.ui-widget-overlay').click(function () {
                $('.ui-dialog-content').dialog('close');
            });
            return false;
        });

        $('#chg-Password-btn').click(function () {
            $(modalChgPass).dialog(modalPasswordChangeOpts);
            $(modalChgPass).dialog('open');
            $('.ui-widget-overlay').click(function () {
                $('.ui-dialog-content').dialog('close');
            });
            return false;
        });

        $('#btn-modal-card-activate').click(function () {
            $(modalActive).dialog(modalCardActivateOpts);
            $(modalActive).dialog('open');
            $('.ui-widget-overlay').click(function () {
                $('.ui-dialog-content').dialog('close');
            });
            return false;
        });

        $('#btn-modal-preferences-edit').click(function () {
            $(modalEdit).dialog(modalPreferencesEditOpts);
            $(modalEdit).dialog('open');
            $('.ui-widget-overlay').click(function () {
                $('.ui-dialog-content').dialog('close');
            });
            return false;
        });

        });


    window.RCC = window.RCC || {};
})(window);

这是带有验证的.js:

var $ = jQuery;
    $.validator.addMethod('mypassword', function (value, element) {
        return this.optional(element) || (value.match(/[a-zA-Z]/) && value.match(/[0-9]/));
    },
'Password must contain at least one number.');



$(document).ready(function () {
    $("#form1").validate({
        rules: {
            ChgPass$CurrentPass: {
                required: true
            },
            ChgPass$NewPass: {
                required: true,
                minlength: 8,
                maxlength: 16,
                mypassword: true

            },
            ChgPass$ConfirmPass: {
                equalTo: "#ChgPass_NewPass"
            }
        }

    });
});

如何禁用“modalChgPass”以允许“modalActive”和“modalEdit”处理?预先感谢您的协助。问候,

4

3 回答 3

3

做你想做的最好的方法可能是使用插件的忽略选项。如果这是您想要的,请检查此链接

编辑 1

也许是这样的:

用于迭代要禁用的模式的函数。

当您显示主模式以禁用/启用其他模式时,将调用此函数

     function TogglePanelValidation (panel, enabled) {

      panel.find("input, select").each(function () {
       var thisobj = $(this);

        if (!enabled) {
                $(this).addClass('ignore').removeClass('yourinput class');

        } else {
            if ($this.hasClass('ignore')) {
                $this.removeClass('ignore').addClass('yourinput class')
            }
        }
    });
   }
于 2013-11-07T22:45:17.790 回答
1

您不能动态地“启用”和“禁用”表单上的插件。一旦您调用.validate()以初始化字段上的规则,您随后的任何调用都.validate()将被忽略。

但是,and.rules('add')方法.rules('remove')允许您快速、动态地在任何字段上添加和删除规则,而不受限制。

我的简单演示加载了在.validate(). 然后在单击按钮时,通过从该部分中删除所有规则来有效地禁用某些字段的验证。

概念证明演示:http: //jsfiddle.net/xfSs5/

于 2013-11-07T22:48:52.293 回答
0

以下代码可以避免 jquery.validate() 关键是伪造规则,该规则仅适用于一种模式。

  $('#btn-modal-card-activate').click(function () {
        settings = $('#form1').validate().settings;
        for (var i in settings.rules) {
            settings.rules[i].required = false;
        }
        $(modalActive).dialog(modalCardActivateOpts);
        $(modalActive).dialog('open');
        $('.ui-widget-overlay').click(function () {
            $('.ui-dialog-content').dialog('close');
        });
        return false;
        }); 
于 2013-11-08T22:23:31.303 回答