2011-06-20 10 views
3

私は、ダウンロードボタンとアップロードボタンを使ってMVCにページを構築しています。ユーザーがアップロードをクリックすると、JQuery UIダイアログを使用して警告メッセージを表示するポップアップを表示しています。このポップアップで「OK」ボタンをクリックすると、Jqueryを使用してフォームを送信します。これはFirefoxで正常に動作しますが、フォームはIEで送信されません。Jquery UIダイアログフォームIEでのサブミットバグ

ビュー

<form id="form1" enctype="multipart/form-data" method="post"> 
    <div style="clear:both; margin-top:10px">  
     <fieldset> 
      <legend>Legend</legend> 

      <div style="float:right"> 
       <input type="file" name="file" id="file" style="display:none" onchange="SetFakeText();"/> 
       <input id="txtFakeText" readonly="readonly" onclick="HandleFileButtonClick();" style="width:280px"/> 

       <input type="button" id="cmdFakeButton" value="Browse" onclick="HandleFileButtonClick();"/>     
       <input type="button" id="ReUploadButton" value="Upload"/> 
      </div> 

      <input type="submit" name="submitButton" value="Download" /> 

     </fieldset> 
    </div> 

    <div id="dialog"> 
     <label style="font-weight:bolder; color:red;">Warning!</label> 
     <br /> 
     <label>Uploading will overwrite old data</label> 
     <br /> 
     <img id="loading" src="<%= ResolveUrl("~/Images/LoadingSpinner.gif")%>" alt="" style="display:none; margin-left:120px;"/> 
    </div> 
</form> 

スクリプト

<script type="text/javascript"> 
    function HandleFileButtonClick() { 
     document.getElementById('file').click(); 
    }; 

    function SetFakeText() { 
     document.getElementById('txtFakeText').value = document.getElementById('file').value; 
    }; 

    $('#ReUploadButton').click(function() { 
     $('#dialog').dialog('open'); 
    }); 

    $(function(){      
    $('#dialog').dialog({ 
    autoOpen: false, 
    width: 300, 
    position: 'center', 
    title: 'Uploading', 
    modal: true, 
    buttons: { 
     'Ok': 
     function() { 
      document.getElementById('loading').style.display = 'block'; 
     $('#form1').submit(); 
       }, 
     'Cancel': 
     function() { 
     $(this).dialog("close"); 
     } 
    } 
    });    
});  
</script> 

私の周り読んだことがあるとの共通の修正は動作しませんでした。誰にもヒントはありますか?

編集:私は、ダイアログの「OK」ボタンを3回クリックした場合

はまた、それは、コントローラのアクションをトリガーするが、ファイルには渡しません。

は、 '実際の' 入力を可視化した後

を解決しました。実際の入力ブラウズボタンを使用すると、フォームを送信できます。しかし、偽の参照ボタンを使用して: -

function HandleFileButtonClick() { 
     document.getElementById('csvFile').click(); 
    }; 

この問題が発生します。別の方法で入力フィールドのスタイルを設定します。

+0

任意のデバッグ情報を複製することはできませんように問題を引き起こして多分があれば確認してください?関数がIEで呼び出されていますか?ローディングdivが表示されますか? – Dave

+0

ダイアログが正常に表示され、ロードdivが表示されます。コントローラの動作でブレークポイントがありますが、コードはそれに達しません。 – Joe

+0

$( "#form1")とは何ですか?IEのサイズ()? – Dave

答えて

2

form要素にダイアログを追加すると問題は解決しますか?これは.NETがある場合、私は、要素がformタグ内にない場合に、いくつかの奇抜なことを行う.NET見てきました

$(function(){      
    $('#dialog').dialog({ 
     autoOpen: false, 
     width: 300, 
     position: 'center', 
     title: 'Uploading', 
     modal: true, 
     buttons: { 
     'Ok': 
     function() { 
      document.getElementById('loading').style.display = 'block'; 
     $('#form1').submit(); 
       }, 
     'Cancel': 
     function() { 
     $(this).dialog("close"); 
     } 
     }, 
     open: function(){ 
     $('.ui-dialog').appendTo('form'); 
     } 
    }); 

(デフォルトではjQueryのは、bodyタグにダイアログを追加)

編集: $(this)の代わりに.ui-dialogをターゲティングしてみてください

+0

答えてくれてありがとう、これは、ダイアログのポップアップから、その下のフォームに要素をプルするようです。そして、フォームは依然として提出しません。ダイアログdivはフォームの中にありますので、これは問題ではないと思います。しかしもう一度ありがとう。 – Joe

+0

@Joe HTMLを作成するためにjQueryが使用するダイアログはフォーム内にありますが、実際に作成されたダイアログはbodyタグに追加されます。これを確認するには、FirebugまたはChromeツールを使用してください。とにかく、私の答えを更新しました。$(this)の代わりに '.ui-dialog'要素をターゲットにしてみてください。 – Mutt

+0

あなたの権利は、私はそれが身体の最後に追加されたことを認識していませんでした。私はあなたの新しいコードを追加しましたが、フォームはまだ提出しません。スクリプトエラーはなく、すべてが呼び出されますが、コントローラアクションはトリガされません。 – Joe

0

空の場合でもアクションをフォームに追加する必要がありますか?

なく、あなたのコード内で何か他のものは、私が問題

see my fiddle

+0

提案していただきありがとうございます。私はアクションを追加しようとしましたが、フォームはまだ提出しません。私は自分のページを取り除き始め、スタイリングによる偽の入力が問題を引き起こしていることを発見しました。私はそれが何であるかを正確に知ったときに答えを掲示します。 – Joe

関連する問題