2016-05-12 124 views
0

我動態地添加規則到jQuery驗證窗體。該規則是動態添加的,因爲字段名稱包含一個變量。這是代碼。jQuery驗證自定義動作添加規則

$('#message_' + default_language_id + '_0').rules('add', { 
    required: true, 
    messages: { 
     required: "something is wrong." 
    } 
}); 

我希望這個規則在窗體驗證時使用匿名函數執行動作。但是,如果沒有在文檔準備好的情況下執行該功能,我無法找到一個選項/方法來完成此操作。

下面是一個擴展的代碼片段把它在更多的上下文:

$(document).ready(function(){ 
var default_language_id = $("#default_language_id").val(); 

var validator = $("#message_form").submit(function() { 
tinyMCE.triggerSave(); 

}).validate({ 
    ignore: "", 
    rules: { 
     publish_date: { 
      check_publish_date: true, 
      check_expiry_date: true 
     }, 
     expiry_date: { 
      check_expiry: true, 
     } 
    }, 

    errorElement: "span", 
    errorClass: "help-block", 
    highlight: function (element, errorClass, validClass) { 
     $(element).closest('.form-group').addClass('has-error'); 
    }, 
    unhighlight: function (element, errorClass, validClass) { 
     $(element).closest('.form-group').removeClass('has-error'); 
    }, 
    errorPlacement: function (error, element) { 
     if (element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio') { 
      error.insertAfter(element.parent()); 
     } else { 
      error.insertAfter(element); 
     } 
    } 
}); 

$('#message_' + default_language_id + '_0').rules('add', { 
    required: true, 
    messages: { 
     required: "something is wrong" 
    }, 
}); 

所以,我想結束了是這樣的(這不起作用):

$('#message_' + default_language_id + '_0').rules('add', { 
    required: true, 
    messages: { 
     required: "something is wrong." 
    }, 
    onsubmit: function(){ 
     alert("I am only triggered when the form errors on this rule"); 
    } 
}); 

任何人都可以幫忙嗎?提前致謝。

+0

你絕對應該** **不具備'.validate()''一個處理submit'裏面方法。此方法僅用於DOM準備**初始化**插件和「點擊/提交」事件然後自動處理。 – Sparky

回答

0

的解決方案是:

$('#message_' + default_language_id + '_0').rules('add', { 
    my_new_rule: true 
}); 

$.validator.addMethod("my_new_rule", function(value, element) { 

    // My rule 

}, "something went wrong");