3

オーバーレイをモーダルにできるようにしようとしています。FireFox では問題なく動作しますが、window オブジェクトがモーダルになるとマスクの背後にあります。これにより、それとの相互作用が妨げられ、ページは実際には役に立たなくなります。これをしばらくデバッグしようとしましたが、わかりません。

彼らのサイトの例へのリンクは次のとおりです: http://flowplayer.org/tools/demos/overlay/modal-dialog.html

$.fn.cfwindow = function(btnEvent,modal,draggable){
    //error checking
    if(btnEvent == ""){
        alert('Error in window :\n Please provide an id that instantiates the window. ');
    }   

    if(!modal && !draggable){
        $('#'+btnEvent+'[rel]').overlay();
        $('#content_overlay').css('cursor','default');
    }

    if(!modal && draggable){
        $('#'+btnEvent+'[rel]').overlay();
        $('#content_overlay').css('cursor','move');
        $('#custom').draggable();
    }

    if(modal){
        $('#'+btnEvent+'[rel]').overlay({
            // some mask tweaks suitable for modal dialogs
            mask: {
                color: '#646464',
                loadSpeed: 200,
                opacity: 0.6
            },
            closeOnClick: false
        }); 
        $('#content_overlay').css('cursor','default');
        $('#custom').addClass('modal');
    }

};

それが私が電話をかけるときに参照しているものです:

<script type="text/javascript">         
    $(document).ready(function(){
        $(document).pngFix();
        var modal = <cfoutput>#attributes.modal#;
        var drag = #attributes.draggable#;
        var btn = '#attributes.selector#';
        var src = '#attributes.source#';

        var wid = '#attributes.width#';

        $('##custom').width(parseInt(wid));

        $('div##load_content').load(src);
        $('##custom').cfwindow(btn,modal,drag,wid);
    });
</script>

モーダルの CSS:

<style type="text/css">
    .modal {
        display:none;
        text-align:left;                
        background-color:#FFFFFF;
        -moz-border-radius:6px;
        -webkit-border-radius:6px;

    }
</style>

および追加のポンド記号 IE を除外します。「##」。

問題のスクリーンショット: http://twitpic.com/1tak06

注: IE6 と IE8 には同じ問題があります。

どんな助けでも大歓迎です。

Update: HTML of the overlay/modal window:

            <div class="simple_overlay" id="custom">
                <div id="content_overlay">
                   <div id="handler">
                        <div id="headerss">
                            <h5 class="titless"><span style="color:##000000;">#attributes.title#</span></h5>
                            <div class="yellowRule"></div>
                        </div>
                        <div id="load_content">    

                        </div>              
                    </div>
                </div>
            </div>

更新: フロントエンドを追加

    <!-- overlay triggers. overlay is referenced in the 'rel' attribute -->
    <p>

        <button rel="#custom" type="button" id="openWindow">Email</button>
    </p>

    <cf_eo_window2 
        title="This modal isn't working in IE!"
        selector="openWindow"
        draggable="false"
        width="350"
        modal="true"
        source="import-test.cfm" 
        />
4

5 に答える 5

3

これはかなり古い質問ですが、IE6とIE7の問題をjQueryToolsオーバーレイで克服しました。

「.modal」のクラスを持つ私のdivは、相対位置を持つコンテナdiv内にネストされていたため、モーダルクラスに強制しようとしたz-index設定はまったく効果がありませんでした。

モーダルdivをコンテナの外に移動しました。私の場合は、ページの一番下の本文タグの直前に移動しました。IE6とIE7では非常に優れたオーバーレイが表示されます。

コンテナクラスからモーダルクラスにスタイリングをコピーする必要がありましたが、IE6を使用しているサイト訪問者の数がまだ多いクライアントに望ましい結果を得るには、非常に煩わしいIMHOであり、実装よりも確実に迅速なソリューションです。まったく異なるjQueryプラグイン。

于 2011-01-02T21:36:39.073 に答える
1

これをオーバーレイのあるページに追加します。

<!DOCTYPE html>
于 2012-07-22T15:21:49.013 に答える
0

私はIE8でも同じ問題を抱えており、IE7ではなくIE8の互換性を使用していますが、うまくいき<!DOCTYPE html>ません。カスタムマスクを作成します:

#mask-modal{
position:absolute;
z-index:9000;
background-color:#fff;
display:none;
}

<div id="#mask-modal"></div>

    if (jQuery.browser.msie == true && jQuery.browser.version == 8) {
        /* Carga el overlay confirmar */
        jQuery("#modalconfirmar .modalInput").overlay({
            // Calcula el centro de la ventana
            top : ((jQuery(parent.document).height() / 2) - (jQuery("#modalconfirmar").innerHeight() + 180 )),
            closeOnClick: false,
            onBeforeLoad: function(){
                // @TODO cargar mask custom

                //Get the screen height and width
                var maskHeight = $(document).height();
                var maskWidth = $(window).width();

                //Set height and width to mask to fill up the whole screen
                $('#mask-modal').css({
                    'width':maskWidth,
                    'height':maskHeight
                });

                $('#mask-modal').fadeTo(500,0.6);
                // Load page into iframe
                jQuery(document.body).css('overflow', 'hidden');
            },
            onLoad : function(){
                jQuery("#modalconfirmar").css('z-index', jQuery("#mask-modal").css('z-index') + 10 );
            },
            onClose : function(){
                jQuery("#modalconfirmar .si").off();
                $('#mask-modal').fadeOut(400);
            }
        });}
于 2013-01-25T17:57:00.983 に答える
0

ヒントは私にはうまくいきませんでした。問題を解決するには、IE 8 で動作するように ui-widget-overlay 位置属性を Absolute に再定義する必要がありました。これは、ダイアログの open 関数で行われます。

$dialog.dialog( { ..... ,open: function() {$('.ui-widget-overlay').css('position', 'absolute');} ,close: function() {$('.ui-widget-overlay').css('position', 'fixed');} ....}); それが役立つことを願っています。

于 2014-05-28T06:06:36.030 に答える
0

z-index:999; を追加してみましたか? あなたの.modalに?あなたのdivにはモーダルのクラス名があると思いますか? html がどのように設定されているか確認できますか?

于 2010-06-02T16:05:39.167 に答える