2012-03-16 61 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(); 
      } 
     } 
    });