2012-03-16 72 views
0

我有一個允許用戶提交附件的.net mvc應用程序。爲此,我不使用任何特殊的東西,比如插件等,只是使用標準的表單文章。使用jQuery對話框攔截文件上傳提交

但是,我想攔截具有確認對話框的請求,並且只在OK上發佈。

爲了做到這一點,我使用了preventDefault,否則對話框只會顯示一秒,然後表單發佈。

看起來很直截了當。我遇到的問題是,因爲它是一個文件上傳,我需要繼續提交,並基本上撤銷preventDefault。

所以我遇到的問題是我必須使用preventDefault來停止標準提交,但它也會在用戶選擇確定繼續時完全停止提交。同樣,由於文件上傳,我必須允許默認行爲,因爲試圖以任何其他方式執行它,例如$ .post('@ Url.Action(「etc」,「etc」)',$('#form ').serialize());然後會導致控制器不接收上傳的文件。

這裏是我的代碼至今:

$(document).ready(function() { 
    $("form").submit(function (e) { 

     var evt = e || event; 
     if (evt.preventDefault) 
      evt.preventDefault(); 
     else 
      evt.returnValue = false; 

     $('#divConfirm').dialog({ 
      height: 200, 
      width: 450, 
      title: 'Confirm', 
      modal: true, 
      autoOpen: false, 
      buttons: { 
       "Continue": function() { 
        $(this).dialog("close"); 
        return true; 
        //$.post('@Url.Action("etc", "etc")', $('#form').serialize()); 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
        //evt.preventDefault(); 
       } 
      } 
     }); 
     $('#divConfirm').dialog("open"); 
    }); 
}); 

所以的preventDefault停止所有submision甚至接受,但刪除它完全阻止的對話框中,只有閃爍第二個對話框。我已經搜索過類似的帖子,但還沒有找到任何解決方案。

任何幫助,非常感謝。

+0

而不是在提交時執行它爲什麼不調用對話框並使用對話框的OK一側來執行提交功能? – 2012-03-16 21:25:06

回答

0
$("form").submit(function (e) { 

    var evt = e || event; 
    if (evt.preventDefault) 
     evt.preventDefault(); 
    else 
     evt.returnValue = false; 

    var formElement = this; //****modified*** 
    $('#divConfirm').dialog({ 
     height: 200, 
     width: 450, 
     title: 'Confirm', 
     modal: true, 
     autoOpen: false, 
     buttons: { 
      "Continue": function() { 
       $(this).dialog("close"); 
       formElement.submit(); //****modified*** 
       return true; 
       //$.post('@Url.Action("etc", "etc")', $('#form').serialize()); 
      }, 
      "Cancel": function() { 
       $(this).dialog("close"); 
       //evt.preventDefault(); 
      } 
     } 
    });