在没有触发事件的情况下调用函数

时间:2015-04-30 10:49:27

标签: javascript jquery

我有一个功能,我想用它来扩展各个地方的菜单。我希望它可以通过单击菜单相关按钮来触发,但是此时它正在页面加载时被调用(我假设从文档准备就绪),并且添加了类'expanded'而没有单击一个按钮。我很困惑为什么会发生这种情况,因为它应该被称为.on('click' ..

jQuery(document).ready(function ($) {
    'use strict';

    $('#btn-expand-mobile-nav').on('click', showMenu('#side-navigation'));

});

function showMenu(menu) {
    var x = $(menu),
        y = 'expanded';
    if (x.hasClass(y))
        x.removeClass(y);
    else
        x.addClass(y);
}

1 个答案:

答案 0 :(得分:4)

您正在立即调用此功能。而是使用匿名函数推迟执行:

[7190:0501/233446:ERROR:browser_main_loop.cc(170)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.

如果没有参数,可以完成此操作:

$('#btn-expand-mobile-nav').on('click', function(){
     showMenu('#side-navigation')
});

$('#btn-expand-mobile-nav').on('click', showMenu); 的简单解释:

单独使用函数名称,您指向变量@skobaljic并稍后将其称为函数。

通过使用你所说的showMenu,这是一个临时变量,包含一个函数,你可以稍后调用。

e.g。它与:

相同
function(){}

正如var temp = function(){ showMenu('#side-navigation') } $('#btn-expand-mobile-nav').on('click', temp); // No parenthesis on temp 正确指出的那样,可以使用@Dave Newton简化:

toggleClass