2016-05-12 5 views
0

Ich bin dynamisch hinzufügen eine Regel zu einem jQuery validieren Formular. Diese Regel wird dynamisch hinzugefügt, da der Feldname eine Variable enthält. Dies ist der Code.jQuery validate hinzufügen Regel mit benutzerdefinierten Aktion

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

Ich mag diese Regel eine Aktion mit einer anonymen Funktion auszuführen, wenn das Formular überprüft wird. Aber ich kann keine Möglichkeit finden, dies zu tun, ohne dass die Funktion auf dem Dokument bereit ist.

Hier ist ein erweiterter Code-Schnipsel es in mehr Kontext stellen:

$(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" 
    }, 
}); 

Also, was ich will, mit am Ende ist so etwas wie dies (das funktioniert nicht):

$('#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"); 
    } 
}); 

Kann jemand helfen? Danke im Voraus.

+0

Sie sollten absolut ** nicht ** haben die '.validate()' Methode innerhalb eines 'submit' Handler. Diese Methode wird nur auf DOM verwendet, das bereit ist, ** das Plugin zu initialisieren und die 'click/submit' Ereignisse werden dann automatisch behandelt. – Sparky

Antwort

0

Die Lösung war:

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

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

    // My rule 

}, "something went wrong");