Javascript 为什么单击时定义的函数会在页面加载时运行?

Javascript 为什么单击时定义的函数会在页面加载时运行?,javascript,jquery,Javascript,Jquery,这是我第一次在stackOverflow上发表文章,我真的希望我不要把事情搞砸 我用罗盘、基础和jQuery构建一个网站,我的代码有个问题: $(document).ready(function(){ function navOn(){ //var navWidth = $('nav').outerWidth(); //var contentWidth = $('.feed').outerWidth(); $('.innerWrap').t

这是我第一次在stackOverflow上发表文章,我真的希望我不要把事情搞砸

我用罗盘、基础和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:未定义导航

而且

if ($('.nav-main').hasClass('is-nav')){
    $('.feed').click(navOn);
}
似乎不起作用


非常感谢您在单击绑定中传递对
navOn
函数对象的引用。目前,您正在调用
navOn
函数,并将结果(
undefined
)传递到
click()
活页夹中,由于明显的原因,该活页夹无法工作

您只需从
navOn()的用法中删除括号即可:

。。。

$(“#临时开关”)。单击(导航);// 在单击绑定中,应该传递对
navOn
函数对象的引用。目前,您正在调用
navOn
函数,并将结果(
undefined
)传递到
click()
活页夹中,由于明显的原因,该活页夹无法工作

您只需从
navOn()的用法中删除括号即可:

。。。

$(“#临时开关”)。单击(导航);// 回调需要传递一个指针。您所做的实际上是调用函数,而不是提供对它的引用

它应该是这样的:

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

回调需要传递一个指针。您所做的实际上是调用函数,而不是提供对它的引用

它应该是这样的:

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

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

而不是

 $('#tempSwitch').click(navOn());
试着做

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

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

而不是

 $('#tempSwitch').click(navOn());
试着做

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

$('#tempSwitch').click(navOn);
现在您正在调用函数,而不是将其设置为处理程序。

将其更改为

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

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

从单击函数中的
navOn()
中删除paren
($()。单击(navOn))
从单击函数中的
navOn()
中删除paren
($()。单击(navOn))
$('#临时开关')。单击(navOn)
。记住,函数是对象(一等公民)。
$(“#tempSwitch”)。单击(导航)
。记住,函数是对象(一等公民)。非常感谢您的深入回答,这非常有帮助。但是,我试图理解为什么当我打开控制台并尝试运行navOn()时,如果($('nav main').hassclass('is-nav')){$('feed')。单击(navOn);}似乎无法工作,则也没有定义navOn()。非常感谢您除了修复之外,您的代码是否与您发布的代码相同?首先,我要感谢您分享您最宝贵的商品、时间和专业知识。至于你的问题,我相信你可以在这里找到:这是一个涉及范围的问题;我在DOC中定义了这个函数。READY function-Problem solved非常感谢您的深入回答,非常有帮助。然而,我试图理解为什么当我打开控制台并尝试运行navOn()时,我得到了ReferenceError:navOn也没有定义,如果($('.nav main').hasglass('is-nav')){$('.feed')。单击(navOn);}似乎不起作用。非常感谢您除了修复之外,您的代码是否与您发布的代码相同?首先,我要感谢您分享您最宝贵的商品、时间和专业知识。至于你的问题,我相信你可以在这里找到:这是一个涉及范围的问题;我在DOC.READY函数中定义了函数-问题已解决