2

スクロール時にメニューバーをブラウザーに固定するために実行するこのスクリプトがあります。ここでは何も変更する必要はありません (正常に動作します)。しかし、あなたはそれを必要とするかもしれません...

var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');
var start = $(div).offset().top;

$(function fixedPackage(){   
    $.event.add(window, "scroll", function() {
        var p = $(window).scrollTop();
        $(div).css('position',((p)>start) ? 'fixed' : 'static');
        $(div).css('top',((p)>start) ? '0px' : '');

        //Adds TOP margin to #main_wrapper (required)
        $(editor).css('position',((p)>start) ? 'relative' : 'static');
        $(editor).css('top',((p)>start) ? '88px' : '');
    }); 
});

さて、当面の問題です。モーダル ポップアップを呼び出す別のスクリプト関数があります (これも正常に機能します)。ただし、モーダルを開いたときにページをスクロールすると、UI の観点からは滑らかではありません。そのため、以下のモーダル スクリプトが呼び出されたときに、上記のスクリプトを無効にしたいと考えています。つまり、クリックしてモーダル ポップアップを開くと、上記のスクリプトは機能しません。

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).click(function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click',fixedPackage);
});

})

上記のように、スクロール機能 (最初のコード スニペット) をアンバインドしようとしましたが、これは正しくありません。

これら 2 つのスクリプトは、2 つの別個の js ライブラリにあります。

4

4 に答える 4

3

私は、あなたがイベントを束縛したり束縛を解いたりするべきであることに強く反対します. 必要がない!モーダルが開いているかどうかを確認するためのスクロール イベントの小さなロジックは、問題を処理する必要があります。

$(function fixedPackage(){   
    $(window).bind("scroll", function() {

        // if the modal is displayed, do nothing
        if ($('#setupPanel').is(':visible'))
            return;

        // -- existing code here --
    }); 
});

このように、モーダル要素が表示されている場合、コードはその場所で停止します。要素を非表示にすると、コードは他のスクリプトでイベントの状態を管理する必要なく、以前と同じように機能し続けます...混乱します!

また、他のコメントで述べたように、使用しない$.event.addで、パブリック API メソッドを使用してくださいbind

ドキュメンテーション

于 2012-06-26T21:11:29.107 に答える
1

jquery オブジェクトを var に格納すると、関数を直接呼び出すことができます。

var setUp = $('.setupButton');
var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');

setUp.click(...);
seTup.unbind(...);

editor.css(...);

div.css(...);
于 2012-06-26T21:05:51.803 に答える
0

スクリプトを次のように変更するだけです。

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).bind('click',function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click');
});

})

jQuery ドキュメントで説明されているように、Event handlers attached with .bind() can be removed with .unbind(). バインドとアンバインドの詳細については、次を参照してください。

。練る()

。解放する()

于 2012-06-26T21:05:32.847 に答える
0

試す

  $(setUp).unbind('click').die('click')
于 2012-06-26T21:03:23.160 に答える