2017-07-29 10 views
0

後に動作を停止する:jQueryのvalidateJsは、私は、次のjQueryの検証コードを持っている第一Ajax呼び出し

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

これは、今、私が直面してる2つの問題がある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> 

です。

  1. 私は$( '')を配置した場合。検証({}) $(ドキュメント).ready(関数(){})内でそれだけで、すなわち通常の が起こる提出動作しません。私はそれを外に置くと、それは動作します。

  2. 私は動的に<フォーム>置き換える(サーバーからレンダリング同じ形式 をして、既存のフォームを置き換える)場合は、 検証()単に動作を停止し、通常のポストバックが発生しました。

+0

もはや1があなたのあなたの取扱いので、あなたは、あなたのAJAX呼び出しで 'のid =「formObjective」'と '

'を交換します存在する。 [イベント委任](https://learn.jquery.com/events/event-delegation/) - '$( '#editor')を使用する必要があります( 'submit'、 'form'、function(){ ...}); ' –

答えて

1

あなたは修正フォーム送信の問題のために、このコードを試すことができます。

$("#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

しかし、その理由は何だと思いますか?何らかの間違いがある場合、それは決してうまくいかないはずです。 –

+0

この問題は、この新しいアップデートで検証フォームによってデフォルトの提出を防ぐから来て、あなたはこのようにハンドラを提出し、カスタムからfalseを返す必要があります。機能(フォーム){ : $(「フォーム」)({ submitHandlerを検証//ここで何かしてください false false; } }); –

+0

は、送信ハンドラでe.preventDefault()の後に$( '')。valid()を呼び出すまで機能しませんでした。 –

関連する問題