为什么在Click上定义的函数会在页面加载时运行?

时间:2013-09-26 23:37:11

标签: javascript jquery

这是我第一次在stackOverflow上发帖,我真的希望我不会搞砸它。

我正在使用Compass,Foundation和jQuery构建一个网站,我的代码存在问题:

$(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');
    })
});

当我加载文档时,我得到两个控制台日志(意味着函数运行了两次),但是当我实际点击我指定的触发器时没有任何反应。

关于为什么这不起作用的任何想法?

修改 非常感谢你的回答。

但是,我试图理解为什么,当我打开控制台并尝试运行navOn()时,我得到了 ReferenceError:未定义navOn

另外,

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

似乎不起作用。

非常感谢您提前

5 个答案:

答案 0 :(得分:6)

在您的点击绑定中,您应该传递对navOn函数对象的引用。目前,您正在调用 navOn函数,并将结果(undefined)传递到click()活页夹中,由于显而易见的原因,这将无效。< / p>

您只需从navOn()

的用法中删除括号即可
...
$('#tempSwitch').click(navOn); // <= here
if ($('.nav-main').hasClass('is-nav')){
    $('.feed').click(navOn); // <= and here
}
...

答案 1 :(得分:3)

从点击功能navOn()

中删除($().click(navOn))的parens

答案 2 :(得分:0)

回调期望传递指针。你正在做的是实际调用函数而不是提供它的引用。

它应该是这样的:

$('.feed').click(navOn);

答案 3 :(得分:0)

这是因为您没有将函数传递给click处理程序,而是实际上是在调用该处理程序。

而不是

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

尝试

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

答案 4 :(得分:0)

将其更改为

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

现在你正在调用该函数,而不是将其设置为处理程序。