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