1

イベントの伝播を防ぐために、次のコードを使用しています。

function mapSlider(e) {
if ($('.slideme').hasClass('open')) {
        $('.slideme').animate({left:0,},'slow').removeClass('open');
        $('.opened').hide();
        $('.closed').show();
        } else {
        $('.slideme').animate({left:-710,},'slow').addClass('open');
        $('.opened').show();
        $('.closed').hide();
        }
        return(false);

        if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
        e.preventDefault();
        e.stopImmediatePropagation();
}

ChromeとSafariでは動作しますが、OperaやFirefoxでは動作しません(まだIEを試していません!)。FFfirebugは「e」が未定義であると言います。私はjqueryの第一人者であることにほど遠いので、eが未定義である理由がわかりませんが、本当ですか?var eそれを定義していると思いましたか?

そして、どうすればそれを修正できますか?

愚かな質問に対するお詫び-私は独学で、行くにつれて物事を拾い上げます。

MTIA

4

2 に答える 2

4

jQueryは、これらすべてのブラウザーの違いを統合します。あなたはただする必要があります:

function mapSlider(e) {
    if ($('.slideme').hasClass('open')) {
        $('.slideme').animate({left:0,},'slow').removeClass('open');
        $('.opened').hide();
        $('.closed').show();
    } else {
        $('.slideme').animate({left:-710,},'slow').addClass('open');
        $('.opened').show();
        $('.closed').hide();
    }
    e.stopPropagation();
    e.preventDefault();
}

あなたの例では、return false;以前のように、下部のコードはとにかく実行されることはありません。

これは、この関数がどのように呼び出されるかに依存します。イベントハンドラとして適切に割り当てると、イベントオブジェクトが自動的に渡されます。

アップデート:

コードでは、eventオブジェクトをハンドラーに渡していません。あなたはしなければならない:

<div id="map-box" class="slideme" onClick="mapSlider(event)">

しかし、これはIEでは機能しないと思います。

したがって、jQueryの方法で実行することをお勧めします

$(function() {
    $('#map-box').click(mapSlider);
});

jQueryのドキュメントはかなり良いので、読むことをお勧めします。特にこの場合Eventオブジェクトについて。

このチュートリアルもご覧ください。

于 2011-04-20T07:26:10.650 に答える
0

falseを返した後のコードは実行されません。関数の最後の行にfalseを返します。

于 2011-04-20T07:26:12.227 に答える