2013-08-31 62 views
2

我試圖設置一個元素作爲使用jQuery的對象的屬性。當我直接引用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 
} 
+0

我更新了我的答案。 – OneOfOne

回答

2

如果calculator.settings.displayNumber未在dom就緒範圍內創建,則它不具有元素。

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,你可能會看到「未定義」或崩潰的代碼。

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 
}); 

OR

</body>前只需添加<script>........code.......</script>

第一個是處理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()); 
}); 
+0

我想要做的是製作一個模塊,以便我的一段代碼可以被其他腳本訪問。如果我把它放在jquery ready函數中,計算器對象將被存儲在本地。 – Rich

+0

您需要將它創建爲一個函數,而不是像這樣的對象。 – OneOfOne