2017-03-02 25 views
-1

該代碼的用途是當單擊數組中的字母時,它們應顯示在文本框中。該陣列由字母組成,如鍵盤。我試過但我不知道我做錯了什麼。任何人都可以幫忙嗎?單擊時向文本框添加文本

<html> 

    <head> 

    <body> 
    <textarea id="Alltext"></textarea> 
     <div id = "playground"> 


     </div> 

    </body> 




    <script> 

     var Item = function(name){ 

      this.name = name; 
      var div = document.createElement("div"); 

      div.className = ""; 
      div.innerHTML = name; 
      this.div = div; 
      this.appendTo = function (parent){ 
      parent.append(this.div); 

      } 

      this.setName = function(newName){ 
       this.div.innerHTML = newName; 
       this.name = newName; 
      } 



      this.div.addEventListener('click', function(event){ 


       //change the color of the item for 2 seconds 
       var clickedElement = event.target; 

       clickedElement.classList.add("clicked"); 

       window.setTimeout(function(){ 
       clickedElement.classList.remove("clicked"); 


       }); 


      }); 



     } 

     var names = ["Q","W", "E", "R","T","Y", "U","I","O","P","A","S","D","F","G","H","J","K","L",]; 
     var playground = document.getElementById("playground"); 

     for(var i = 0; i < names.length; i++){ 

      var myItem = new Item(names[i]); 
      myItem.appendTo(playground);    


      } 


    </script> 
</html> 
+1

不知道什麼代碼,這部分是所有關於'變量一個=這一點;'看起來不像任何有效的JavaScript我有生以來看到。可能比這個更多的問題,但你需要解決這個問題。 – chairmanmow

回答

0

此代碼應工作:

<script> 

    var Item = function(name){ 

     this.name = name; 
     var div = document.createElement("div"); 

     div.className = ""; 
     div.innerHTML = name; 
     this.div = div; 
     this.appendTo = function (parent){ 
     parent.append(this.div); 

     } 

     this.setName = function(newName){ 
      this.div.innerHTML = newName; 
      this.name = newName; 
     } 



     this.div.addEventListener('click', function(event){ 

      //change the color of the item for 2 seconds 
      var clickedElement = event.target; 
      var value = document.getElementById('Alltext').value; 
      var newValue = value+event.target.innerText; 
      document.getElementById('Alltext').value=newValue; 

      clickedElement.classList.add("clicked"); 

      window.setTimeout(function(){ 
      clickedElement.classList.remove("clicked"); 


      }, 2000); 


     }); 



    } 

    var names = ["Q","W", "E", "R","T","Y", "U","I","O","P","A","S","D","F","G","H","J","K","L",]; 
    var playground = document.getElementById("playground"); 

    for(var i = 0; i < names.length; i++){ 

     var myItem = new Item(names[i]); 
     myItem.appendTo(playground);    


     } 


</script> 

我加入超時和所需的代碼值添加到文本區域。

的setTimeout需要指定要多久延遲功能window.setTimeout(function(){},2000); //2000 means 2 seconds delay

+0

@Umar讓我知道它是否有問題。 – alireza

+0

這有助於謝謝 – Umar

0

我想你<textarea>應放置在<body>標籤...可能是你的代碼是不是由於其他問題的工作,但是這應該是固定的。

+0

我已經做到了。 – Umar

0

你的第一個問題很可能與在setTimeoutthis參考,這等於(嚴格模式或undefined)在這種情況下,窗口,而不是你希望它是對象。

variable one=this;未正確聲明。

Alltext應引用在";否則,它試圖引用一個不存在的名稱的變量。

這種性質的代碼有很多問題。我強烈建議您在瀏覽器中打開相關頁面,並檢查Devtools中的代碼,這些代碼會提前顯示大部分這些錯誤。從那裏,你可以通過不符合你期望方式的代碼部分工作。

+0

我已經刪除了整套代碼,我輸入要添加文本到文本區域,你能告訴我它是怎麼做到的?謝謝 – Umar