2017-07-29 2 views
0

Ich habe den folgenden JQuery Validierungscode:jQuery validateJs nicht mehr funktioniert nach dem ersten Ajax-Aufruf

$("#formObjective").validate({ 
    messages: 
    { 
     Statement: 'Value must be provided' 
    }, 
    submitHandler: function (form) { 
     try { 
      $.post($('form#formObjective').attr('action'), $('form#formObjective').serializeArray()) 
       .done(function (data) { 
        updateObjectiveGrid('table#objectiveGrid'); 
        $('form#formObjective').closest('div').html(data); 
       }) 
       .fail(function (xhr, error, text) { 
        alert(text); 
       }); 
     } 
     catch (ex) { 
      alert('An error occurred while saving: ' + ex); 
     } 
    } 
} 

Dies ist die HTML

<div id=editor> 
@using (Html.BeginForm("Save", "Objective", FormMethod.Post, new { @class = "form", id = "formObjective" })) 
    { 
     <fieldset> 
      <legend>Add Objective</legend> 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
      @Html.HiddenFor(model => model.Id) 


      <div class="form-group"> 
       @Html.LabelFor(model => model.Notes, "Notes", htmlAttributes: new { @class = "control-label" }) 
       @Html.TextAreaFor(model => model.Notes, new { @class = "form-control" }) 
      </div> 

      <div class="form-group"> 
       <button type="submit" id="save" name="action" class="btn btn-primary btn-default">@Html.GlyphIcon("plus") Save Objective</button> 
       <button type="button" id="clear" name="action" class="btn btn-warning">Clear</button> 
      </div> 
     </fieldset> 
    } 
</div> 

Nun gibt es zwei Fragen, die ich bin vor.

  1. Wenn ich die $ ('') platzieren. Validieren ({}) innerhalb des $ (document) .ready (function() {}) es funktioniert einfach nicht das heißt regelmäßige einreichen passiert. Wenn ich es draußen platziere, funktioniert es.

  2. Wenn ich die <Form> dynamisch ersetzen (die gleiche Form vom Server gerendert und ersetzt die vorhandene Form), dann der validate() einfach nicht mehr funktioniert und regelmäßige Postback auftritt.

+0

Ihr Ersatz des '

' mit 'id = "formObjective"' in der Ajax-Aufruf so einer Ihre Ihre Handhabung nicht mehr existiert. Sie müssen [Event Delegation] (https://learn.jquery.com/events/event-delegation/) - '$ ('# editor') verwenden. On ('submit', 'form', function() { ...}); ' –

Antwort

1

können Sie versuchen, diesen Code für fix Formulareinreichung Problem:

$("#formObjective").submit(function(e) { 
     e.preventDefault(); 
    }).validate({ 
    messages: 
    { 
     Statement: 'Value must be provided' 
    }, 
    submitHandler: function (form) { 
     try { 
      $.post($('form#formObjective').attr('action'), $('form#formObjective').serializeArray()) 
       .done(function (data) { 
        updateObjectiveGrid('table#objectiveGrid'); 
        $('form#formObjective').closest('div').html(data); 
       }) 
       .fail(function (xhr, error, text) { 
        alert(text); 
       }); 
      return false; 
     } 
     catch (ex) { 
      alert('An error occurred while saving: ' + ex); 
     } 
    } 
}); 
+0

aber was denkst du ist der Grund für die Ursache? Wenn es einen Fehler gibt, sollte es nie funktionieren. –

+0

Dieses Problem tritt auf, wenn die Standardeinreichung durch validierte Formulare mit diesem neuen Update verhindert wird: Sie müssen false wie folgt aus Ihrem benutzerdefinierten Übermittlungshandler zurückgeben: $ ("form"). Validate ({ submitHandler: function (form)) { // mache ein paar Sachen hier return false; } }); –

+0

hat nicht funktioniert, bis ich $ (''). Valid() nach e.preventDefault() im Übergabe-Handler aufgerufen habe. –

Verwandte Themen