禁用特定字段的jquery.validatefunction

我在提交到服务器之前使用jquery.validate来validation一些输入字段,客户端。 它很棒! 这个特定的字段组以模态显示,页面上有两个其他模式在不同的时间弹出,具体取决于用户点击的内容; 但是,我的validation仅在其中一个模态上,即使该模态不在屏幕上,也阻止了我的服务器端提交。

下面是我在.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); 

这里是带有validation的.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”处理? 提前感谢您的帮助。 问候,

您无法动态“启用”和“禁用”表单上的插件。 一旦调用.validate()来初始化字段上的规则,您将忽略对.validate()任何后续调用。

但是, .rules('add').rules('remove')方法将允许您.rules('remove')地快速动态地添加和删除任何字段上的规则。

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

概念certificateDEMO: http : //jsfiddle.net/xfSs5/

可能是你想要的最好方法是使用插件的ignore选项。 检查此链接是否符合您的要求

编辑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') } } }); } 

以下代码可以避免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; });