0

これが私の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' 
4

6 に答える 6

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();
});
于 2012-09-11T08:20:18.027 に答える
0

パネルは即時呼び出しを使用する必要があると思います:

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

        return {
            init: init
        }
    })();

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

})();

コードはすぐに実行され、オブジェクトを変数に返しpanelます。したがって、プロパティpanelをピックアップしinitます。

于 2012-09-11T08:20:44.847 に答える
0

この場合、パネルはコールバックであり、このコールバックは別のコールバックを返すinitため、両方のコールバックの前後に () を配置する必要があります。これを試してください。

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

        return {
            init: init
        }
    };

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

})();
于 2012-09-11T08:30:07.150 に答える
0

パネル関数宣言の最後の括弧が抜けていると思います。

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

    return {
        init: init
    }
}();

右中括弧の後に次の文字列が続くことを確認してください()

于 2012-09-11T08:19:09.303 に答える
0

init 関数は別の関数パネルにあります。これは外部からアクセスできません。init メソッドを返したい場合、私の言いたいことがわかっている場合は、init 関数をより高いレベルに設定する必要があります。

于 2012-09-11T08:19:10.837 に答える
0

私はただやります:

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

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

フィドル

あなたがやろうとしていることのように見えますか?

于 2012-09-11T08:21:52.427 に答える