2

jQueryを使用して要素をオブジェクトのプロパティとして設定しようとしています。jquery オブジェクトを直接参照すると機能しますが、電卓オブジェクトを介して参照すると機能しません。

これを修正するにはどうすればよいですか?

var calculator = {

    settings: {
        displayNumber: $('.dispNumber'),
        modNumber: $('.modNumber')
    }
}

window.onload = function(){
    console.log( $('.dispNumber').html() ); //this one works    
    console.log( calculator.settings.displayNumber.html() ); //this one doesn't
}
4

3 に答える 3

2

dom Ready スコープで作成されていない場合calculator.settings.displayNumber、要素はありません。

于 2013-08-31T01:06:21.213 に答える
1

jQuery を使用しているため、DOM を処理するすべてのものを次のいずれかに配置する必要があります。

$(function() {
    //code here will always run after the DOM is ready.
    var calculator = {
        settings: {
            displayNumber: $('.dispNumber'),
            modNumber: $('.modNumber')
        }
    };

    console.log( $('.dispNumber').html() ); //this one works    
    console.log( calculator.settings.displayNumber.html() ); //this one doesn't
});

また

<script>........code.......</script>の前に追加するだけ</body>です。

最初のものは、DOM 関連の操作を処理する適切な方法です。

編集:再利用可能なオブジェクト:

var Calculator = function($) {
    this.settings = {
        displayNumber: $('.dispNumber'),
        modNumber: $('.modNumber')
    };
};

Calculator.prototype = {
    log: function() {
        console.log(this.settings.displayNumber.html());
        console.log(this.settings.modNumber.html());
    }
}

$(function(){
    var calculator = new Calculator($);
    calculator.log();
    console.log(calculator.settings.displayNumber.html());
});
于 2013-08-31T02:56:52.950 に答える
0

あなたのコードは正常に動作します。動作しない唯一の理由は、電卓が window.onload の前にインスタンス化されていないことです。

その問題を取り除くと、すべてが機能します。参照: http://jsfiddle.net/352Cm/

var calculator = {

    settings: {
        displayNumber: $('.dispNumber'),
        modNumber: $('.modNumber')
    }
}

console.log( $('.dispNumber').html() ); //this one works    
console.log( calculator.settings.displayNumber.html() ); //this one doesn't

試してみるとconsole.log(calculator)window.loadおそらく「未定義」またはクラッシュするコードが表示されます。

于 2013-08-31T01:07:40.687 に答える