2011-02-05 15 views
0

這是我的問題的解決方案。我能夠出現一個字段,輸入一個新值,再次點擊該字段,並使該字段隨新值一起消失。每當this.refresh()不是函數時,Firefox錯誤控制檯就會抱怨。惱人的this.refresh()不是Firefox中的函數

如何擺脫this.refresh()不是函數錯誤,以便我可以清除我的Firefox控制檯並查找實際會導致問題的錯誤?

var gotIt='no' 

function askName(x) 
{if(gotIt=='yes') 
    {response=this.name 
    characters[x].setName(response) 
    gotIt='no' 
    } 
    else 
    {gotIt='no' 
    this.name=characters[x].name 
    response="<input onClick=_setName(this.value) size=10 type=text value="+this.name+">" 
    characters[x].setName(response) 
    } 
} 
function _setName(x) 
{this.name=x 
    this.refresh() 
    gotIt='yes' 
} 
+0

你期望`this`指?當你調用「_setName()」函數時,你並沒有這樣做,以至於`this`最終會綁定到任何東西(除了全局對象)。你想要調用什麼「refresh()」函數? – Pointy 2011-02-05 14:26:39

+0

謝謝Pointy,我實際上試圖刷新該字段,以便我輸入的值被捕獲。 – ren1999 2011-02-05 14:43:49

回答

2

幾乎在您的代碼中的所有內容都是錯誤的,下面的代碼會執行您所需的操作。如果你想了解JavaScript,你需要努力。

enter image description here

<!doctype html> 

<html> 
    <head> 
     <script> 
      window.onload = function() { 
       var input = document.createElement ("input"); 
       var span = document.getElementsByTagName ("span")[0]; 

       input.addEventListener ("blur", function() { 
        span.innerHTML = this.value; 
       }, false); 

       span.addEventListener ("click", function() { 
        if (this.getElementsByTagName ("input").length === 0) { 
         input.value = this.textContent; 

         this.innerHTML = ""; 

         this.appendChild (input); 

         input.focus(); 
        } 
       }, false); 
      } 
     </script> 

     <style> 
      span { 
       font-weight: bold; 
      } 
     </style> 

     <title></title> 
    </head> 

    <body> 
     <span>Braveheart</span> 
    </body> 
</html>