我的jquery代码不起作用。为什么?

时间:2012-09-11 08:15:00

标签: javascript jquery function object

这是我的jquery代码,它不起作用。我真的不知道为什么。请帮忙,并告诉我如何解决它。

$(function () {
    var panel = function () {
            var init = function () {
                console.log('hello');
            };

        return {
            init: init
        }
    };

    $('.nav li a').on('click', function (e) {
        panel.init();
    });

})();

我在控制台中收到此错误

Object function () {
    var panel = function () {
        var init = function () {
            console.log('hello');
        }
    };

    return {
        init: init
    }
} has no method 'init' 

6 个答案:

答案 0 :(得分:2)

也许你应该看看如何在Javascript中定义一个类:

http://www.phpied.com/3-ways-to-define-a-javascript-class/

var panel = {
    init: function () {
        alert("Hello!");
    }
}

panel.init();

$('.nav li a').on('click', function (e) {
    panel.init();
    e.preventDefault();
});

答案 1 :(得分:0)

我认为你缺少面板功能声明结束时的括号。

var panel = function () {
    var panel = function () {
        var init = function () {
            console.log('hello');
        }
    };

    return {
        init: init
    }
}();

确保右括号后跟()

答案 2 :(得分:0)

你的init函数在另一个功能面板中。这是从外面无法到达的。 当你想要返回init方法时,如果你知道我的意思,你必须把init函数放得更高。

答案 3 :(得分:0)

我猜这个小组应该使用立即调用:

$(function () {
    var panel = (function () {
            var init = function () {
                console.log('hello');
            };

        return {
            init: init
        }
    })();

    $('.nav li a').on('click', function (e) {
        panel.init();
    });

})();

代码将以imeediately方式执行并将对象返回到panel变量。因此,panel会获得init属性。

答案 4 :(得分:0)

我会这样做:

$(function () {
    var panel = {
        init: function () {
            console.log('hello');
        }
    }

    $('.nav li a').on('click', function (e) {
        panel.init();
    });
});​

FIDDLE

似乎更像是你想要做的事情?

答案 5 :(得分:0)

在这种情况下,面板是一个回调,这个回调返回另一个回调init,所以你必须在两个回调周围放置(),试试这个:

$(function () {
    var panel = function () {
        var init = function () {
            console.log('hello');
        };

        return {
            init: init
        }
    };

    $('.nav li a').on('click', function (e) {
        panel().init();
    });

})();