2017-02-09 3 views
-1

と呼ばれていない私は、提出行動に<form>を上書きしようとするので、私は次のコードを使用します。jQueryの(提出)は

<script type="text/javascript"> 
    $(function() { 
     var form = $("#FilterForm"); 

     form.submit(function() { 
      alert("Submit"); 

      $.ajax({ 
       url: form.attr("action"), 
       type: 'POST', 
       data: new FormData(this), 
       processData: false, 
       contentType: false, 
       success: function (response) { 
        alert(response); 
        $('#Container').html(response); 
       }, 
       error: function() { 
        $('#Container').html(loadingFailedStr); 
       }, 
       timeout: 15000 
      }); 

      return false; 
     }) 
    }); 
</script> 

このスクリプトブロックは私のフォームの後に検索します。

<div class="panel card-0"> 
    <div class="panel-body"> 
     @using (Html.BeginForm("TasksGridViewPartial", "Tasks", new { StaffId = staffId, StageId = stageId }, FormMethod.Post, new { id = "FilterForm", enctype = "multipart/form-data" })) 
     { 
      <fieldset> 
       <div class="form-group row"> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.DateCreate) 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.CreatedOn1, new { @class = "form-control" }) 
         </div> 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.CreatedOn2, new { @class = "form-control" }) 
         </div> 
        </div> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.DateClose) 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.ClosedOn1, new { @class = "form-control" }) 
         </div> 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.ClosedOn2, new { @class = "form-control" }) 
         </div> 
        </div> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.DateStart) 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.StartDate1, new { @class = "form-control" }) 
         </div> 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.StartDate2, new { @class = "form-control" }) 
         </div> 
        </div> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.DateEnd) 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.EndDate1, new { @class = "form-control" }) 
         </div> 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.EndDate2, new { @class = "form-control" }) 
         </div> 
        </div> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.DateCheck) 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.VerifiedOn1, new { @class = "form-control" }) 
         </div> 
         <div class="datepicker"> 
          @Html.TextBoxFor(m => m.VerifiedOn2, new { @class = "form-control" }) 
         </div> 
        </div> 
        <div class="col-md-2 col-sm-6"> 
         @Html.Label(Headers.TaskNumber) 
         <div style="padding: 4px;"> 
          @Html.TextBoxFor(m => m.VerifiedOn1, new { @class = "form-control", type = "number" }) 
         </div> 
         <div style="padding: 4px;"> 
          @Html.TextBoxFor(m => m.VerifiedOn2, new { @class = "form-control", type = "number" }) 
         </div> 
        </div> 
       </div> 
       <div class="form-group row"> 
        <div class="col-md-3 col-sm-6"> 
         @Html.LabelFor(m => m.Executors) 
         @Html.ListBoxFor(m => m.Executors, executors, new { @class = "selectpicker form-control", @title = Messages.ChooseExecutors, multiple = "" }) 
        </div> 
        <div class="col-md-3 col-sm-6"> 
         @Html.LabelFor(m => m.Projects) 
         @Html.ListBoxFor(m => m.Projects, projects, new { @class = "selectpicker form-control", @title = Messages.ChooseProjects, multiple = "" }) 
        </div> 
        <div class="col-md-3 col-sm-6"> 
         @Html.LabelFor(m => m.Statuses) 
         @Html.ListBoxFor(m => m.Statuses, statuses, new { @class = "selectpicker form-control", @title = Messages.ChooseStatuses, multiple = "" }) 
        </div> 
       </div> 
       <div class="form-group row" style="padding-top: 24px;"> 
        <div class="col-md-12"> 
         <button type="submit" class="btn btn-primary">@Actions.Apply</button> 
         <button type="button" class="btn btn-default">@Actions.ClearFilters</button> 
         <button type="button" class="btn btn-default">@Actions.ShowAccepted</button> 
         <button type="button" class="btn btn-default">@Actions.HideAccepted</button> 
        </div> 
       </div> 
      </fieldset> 
     } 
    </div> 
</div> 

この部分的なビューは、@Html.Action("FilterPartial")を呼び出してレンダリングします。
最も興味深いのは、文書準備完了イベントの変数formをチェックし、必要に応じて宣言したことです。しかし、まだsubmitは呼び出されていません。
どこに問題がありますか?

+0

あなたは時に「準備完了」イベントが発生するフォームは、ページの一部であることを確認してください* *ていますか?そうでない場合はエラーは発生しません。あなたは代表団による拘束を試みましたか? – Pointy

+0

私はこの変数を準備関数に記録しました。これは定義されていて、nullではありません。 –

+0

同じIDを持つ別のフォーム(または他の要素)がありますか? –

答えて

1

return falseが十分ではありません、あなたはまた、デフォルトをブロックする必要があります。

$(function() { 
     var form = $("#FilterForm"); 

     form.submit(function (e) { // Pass the event to the function 
      e.preventDefault(); // Stop the form submitting. 

      $.ajax({ 
       url: form.attr("action"), 
       type: 'POST', 
       data: new FormData(this), 
       processData: false, 
       contentType: false, 
       success: function (response) { 
        alert(response); 
        $('#Container').html(response); 
       }, 
       error: function() { 
        $('#Container').html(loadingFailedStr); 
       }, 
       timeout: 15000 
      }); 

      return false; 
     }) 
    }); 
+2

イベントハンドラからfalseを返すと、自動的に 'event.stopPropagation()'と 'event.preventDefault()'が呼び出されます。 – Pointy

+0

ありがとう、もちろん!しかし、私の問題はこれではありません。絶対に呼び出されるわけではないので、関数本体のすべてのコードには値がありません。 –

+0

*呼び出されていないイベントハンドラでpreventDefaultを呼び出すと、影響がゼロになります! –

関連する問題