1

stackOverflow に投稿するのはこれが初めてで、めちゃくちゃにしないでほしいと心から願っています。

Compass、Foundation、および jQuery を使用して Web サイトを構築していますが、コードに問題があります。

$(document).ready(function(){
    function navOn(){
        //var navWidth = $('nav').outerWidth();
        //var contentWidth = $('.feed').outerWidth();
        $('.innerWrap').toggleClass('is-nav');
        $('.post').toggleClass('is-nav');
        $('.nav-main').toggleClass('is-nav');
        console.log("fu");
    };
    $('#tempSwitch').click(navOn());

    if($('.nav-main').hasClass('is-nav')){
        $('.feed').click(navOn());
    }

    $('.nav-menu a').on('click', function(){
        $('.nav-menu a').removeClass('is-active');
        $(this).addClass('is-active');
    })
});

ドキュメントをロードすると、2 つのコンソール ログ (関数が 2 回実行されたことを意味します) が表示されますが、割り当てたトリガーを実際にクリックしても何も起こりません。

なぜこれが機能しないのかについてのアイデアはありますか?

編集: ご回答いただきありがとうございます。

ただし、コンソールを開いて navOn() を実行しようとすると、ReferenceError: navOn is not defined が発生する理由を理解しようとしています。

また、

if ($('.nav-main').hasClass('is-nav')){
    $('.feed').click(navOn);
}

うまくいかないようです。

事前にどうもありがとうございました

4

5 に答える 5

6

navOnクリック バインディングでは、関数オブジェクトへの参照を渡す必要があります。現在、関数を呼び出して結果 ( ) をバインダーにnavOn渡していますが、これは明らかな理由で機能しません。undefinedclick()

の使用法から括弧を削除するだけですnavOn()

...
$('#tempSwitch').click(navOn); // <= here
if ($('.nav-main').hasClass('is-nav')){
    $('.feed').click(navOn); // <= and here
}
...
于 2013-09-26T23:37:58.717 に答える
3

navOn()クリック機能から括弧を削除します($().click(navOn))

于 2013-09-26T23:38:50.807 に答える
0

コールバックは、ポインターが渡されることを期待しています。あなたがしていることは、関数への参照を提供するのではなく、実際に関数を呼び出すことです。

代わりに、次のようになります。

$('.feed').click(navOn);
于 2013-09-26T23:38:08.533 に答える
0

これは、実際にそのハンドラーを呼び出しているのではなく、クリック ハンドラーに関数を渡していないためです。

それ以外の

 $('#tempSwitch').click(navOn());

やってみる

 $('#tempSwitch').click(navOn);
于 2013-09-26T23:38:20.257 に答える
0

に変更します

$('#tempSwitch').click(navOn);

現在、ハンドラーとして設定するのではなく、関数を呼び出しています。

于 2013-09-26T23:38:31.287 に答える