1

这是我第一次在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 is not defined

还,

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

似乎不起作用。

非常感谢您提前

4

5 回答 5

6

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

您应该简单地从您的用法中删除括号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 函数中删除括号($().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 回答