1

iFrame で jquery UI ダイアログを実装しています。ダイアログには、ファイル アップロード ページを持つ iFrame があります。
すべて問題ありませんが、iFrame ページからダイアログを閉じると問題が発生しました。

以下は私のコードです:

親ページ

<!-- Upload File Form -->
<div id="dialog-upload" class="dialog" title="Upload File" style="display:none">
    <div class="message error"></div>
    <iframe id="upload-form" src="file_upload.php" width="276" height="195" frameborder="0"></iframe>
</div>
<!-- button to launch the dialog -->    
<button id="btnUpload">Upload</button>

<script type="text/javascript">
    function _finishUpload(){
        console.log($('#dialog-upload')); // the element was outputed in the console
        $('#dialog-upload').dialog( 'close' ); // the dialog is not closed.
        //$('#dialog-upload').hide() // this code was executed.
    }

    function _fileUpload(){         
        var doc = $('#upload-form')[0].contentWindow; // iframe document
        $('#dialog-upload').find('.message').html('').hide();
        var file = doc.$('form').find('#file').val();
        if( ! file ){
            $('#dialog-upload').find('.message').html('Please select a file.').show();
        }else{              
            doc.$('form').submit(); // submit the form in the iFrame dialog
        }           
    },      

    $(document).ready( function(){
        $( "#dialog-upload" ).dialog({
            modal: true,
            autoOpen: false,
            resizable: false,               
            buttons: {
                OK: function() {
                    _fileUpload();
                },
                Cancel: function(){
                    $(this).dialog( "close" );
                }
            }               
        });

        $( '#btnUpload' ).click(function(){
            $('#dialog-upload').dialog( 'open' ); 
        });     
    } );                    
</script> 

IFRAMEページ

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
    <div class="dialog" style="display:block">
        <form name="frmFileUpload" method="post" enctype="multipart/form-data">
            <fieldset>
                <label for="txtTitle">Upload File</label>                
                <input type="file" name="file" id="file" class="text ui-widget-content ui-corner-all" />
            </fieldset>
        </form>
    </div>
</body>
</html>
<?php if(sizeof($_POST)){ # trigger this only when the form is submitted ?>
<script type="text/javascript">
    window.parent._finishUpload(); // it was executed, but the dialog is not closed
</script>   
<?php } ?>  

iFrameでもこれを試しましwindow.parent.$('#dialog-upload').dialog('close');たが、失敗しました。

4

1 に答える 1

0

これは iFrame を使用する jQuery Mobile のバグです。これを参照してください: https://github.com/jquery/jquery-mobile/issues/4822

于 2013-09-13T09:20:12.760 に答える