2012-03-26 29 views
0

javascript:alert正在動態創建的代碼僅在我使用全局對象引用時纔有效,gvo_Z動態創建的JavaScript失去了這個值

但我寧願爲使用這個(或代理其如lvo_this)。

<div id = "target_div" ></div> 

<script language="javascript" type="text/javascript"> 
    function c_A() 
    { this.om_A = function() 
     { return "got it" ; 
     } ; 
    } ; 

    function c_Z() 
    { this.pvo_A = new c_A() ; 

     this.om_Z = function() 
     { 
      var lvo_this = this ; 

      var lvs_html = "<div onmousedown='javascript:alert(gvo_Z.pvo_A.om_A());' >press me ... WORKS ... uses global reference</div>" ; 
      lvs_html += "<div onmousedown='javascript:alert(lvo_this.pvo_A.om_A());' >press me ... does NOT work ... uses THIS reference</div>" ; 
      document.getElementById("target_div").innerHTML = lvs_html ; 
     } ; 
    } ; 

    var gvo_Z = new c_Z() ; 
    gvo_Z.om_Z() ; 
</script> 
+0

你不需要「JavaScript的:」在代碼中的「onfoo」屬性的開始。 – Pointy 2012-03-26 20:17:38

回答

0

函數添加到您創建的元素。 您可以使用名稱標籤創建你的元素像這樣

<div id = "target_div" ></div> 

<script language="javascript" type="text/javascript"> 
    function c_A() 
    { this.pvs_test = "test" ; 
    } ; 

    function c_Z() 
    { this.pvo_A = new c_A() ; 

     this.om_Z = function() 
    { 
     var lvo_this = this ; 


     var lvs_html = "<div name='yourdiv'>press me ... does NOT work ... uses THIS reference</div>" ; 
     document.getElementById("target_div").innerHTML = lvs_html ; 
document.getElementsByName("yourdiv")[0].onclick = function() { 
alert(lvo_this.pvo_A.pvs_test); 
}; 
    } ; 
    } ; 

    var gvo_Z = new c_Z() ; 
    gvo_Z.om_Z() ; 
</script> 
1

裏面的功能this的範圍DOMWindow

試試這個:

function c_A() { 
    this.pvs_test = "test"; 
}; 

function c_Z() { 

    var self = this; 

    this.pvo_A = new c_A(); 
    this.om_Z = function() { 

     var lvo_this = self; 

     var lvs_html = "<div onmousedown='javascript:alert(gvo_Z.pvo_A.pvs_test);' >my div</div>"; 
     document.getElementById("target_div").innerHTML = lvs_html; 
    }; 
}; 

var gvo_Z = new c_Z(); 
gvo_Z.om_Z();​ 
0

如果你把腳本中的字符串中插入時,它會執行,不當前的情況。除了其他答案之外,您需要在om_Z()方法之外聲明您的「代理」是正確的。

通過實際立即執行培訓相關的表達只是構建腳本:

var lvs_html = "<div onmousedown='javascript:alert(" + lvo_this.pvo_A.pvs_test + ");' >my div</div>" ; 
+0

bhamlin,謝謝你的迴應...我發佈的這個例子被簡化了...在現實中,我不想訪問c_A的簡單字符串prop,而是一個c_A的方法...我將編輯它以反映它。 – dsdsdsdsd 2012-03-26 20:26:36

+0

然後你不能簡單地把腳本作爲一個字符串放到元素上,因爲你失去了所有的上下文(因此需要一個全局對象)。考慮在插入它後將操作綁定到元素 - 然後,您仍將處於om_Z()(和c_Z())方法的範圍內。 – bhamlin 2012-03-26 20:30:12

+0

也許綁定是要走的路... – dsdsdsdsd 2012-03-26 20:33:44