2015-11-20 58 views
0

我正在嘗試學習Javascript,此刻我正在處理AddEventListener。eventlistener javascript問題

我想要做的是添加一個新行,到目前爲止它的工作原理。

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <style> 
     .colorOrange { 
      background-color: orange; 
     } 

     .colorBlue { 
      background-color: blue; 
     } 

     .colorYellow { 
      background-color: yellow; 
     } 

     .colorGray { 
      background-color: gray; 
     } 

     .colorRed { 
      background-color: red; 
     } 

     .colorGreen { 
      background-color: green; 
     } 

     .colorWhite { 
      background-color: white; 
     } 

     #main { 
      margin: 0 auto; 
      width: 325px; 
      text-align: center; 
      background-color: gray; 
     } 

     .row { 
      width: 300px; 
      padding: 10px; 
      border: 1px solid black; 
      display: block; 
     } 

     .hideButton, .mainText, .deleteButton { 
      margin: 0 auto; 
      padding: 10px; 
      border: 1px solid black; 
      display: inline; 
     } 
     .btn { 

     } 
    </style> 
</head> 
<body> 


    <div id="main"> 
     <div class="AddBtn btn">Add</div> 
     <input type="text" id="txtBox" name="text till ruta" /> 

    </div> 
    <script> 
     var rownr = 0; 

     function addListeners() { 
      var addButton = document.getElementsByClassName('AddBtn'); 
      for (var i = 0; i < addButton.length; i++) { 
       var addBtn = addButton[i]; 
       addBtn.addEventListener('click', function() { 
        var elBtn = event.srcElement; 
        var valueBtn = elBtn.textContent; 
        alert(valueBtn); 

        hideOrShow(); 
        addRow(); 

        function addRow() { 
         switch (valueBtn) { 
          case "Add": 

           var input = document.getElementById('txtBox').value; 
           rownr++; 

           var div = document.createElement('div'); 
           div.className = "row"; 
           document.getElementById("main").appendChild(div); 

           var div2 = document.createElement('div'); 
           div2.className = "hideButton colorGreen"; 
           var tx = document.createTextNode("<"); 
           div2.appendChild(tx); 
           div2.addEventListener('click', hideOrShow, false); 
           div.appendChild(div2); 

           var div3 = document.createElement("div"); 
           if (input.toLowerCase() == "red") { 
            div3.className = "mainText colorRed"; 
           } 
           else if (input.toLowerCase() == "orange") { 
            div3.className = "mainText colorOrange"; 
           } 
           else if (input.toLowerCase() == "blue") { 
            div3.className = "mainText colorBlue"; 
           } 
           else if (input.toLowerCase() == "yellow") { 
            div3.className = "mainText colorYellow"; 
           } 
           else if (input.toLowerCase() == "gray") { 
            div3.className = "mainText colorGray"; 
           } else { 
            div3.className = "mainText colorWhite"; 
           } 
           tx = document.createTextNode(rownr + " " + input); 
           div3.appendChild(tx); 
           div.appendChild(div3); 

           var div4 = document.createElement("div"); 
           div4.className = "deleteButton colorRed"; 
           tx = document.createTextNode("X"); 
           div4.appendChild(tx); 
           //div4.addEventListener('click', deleBtn, false); 
           div.appendChild(div4); 

           var linebreak = document.createElement("br"); 
           div.appendChild(linebreak); 
          default: 
         } 
        } 

到目前爲止,一切都按我希望的那樣工作。但是當我點擊「<」時,它會進入這個函數,並找到其中有hideButton類的所有標籤。 第一次點擊它不會找到任何東西,但第二次它會找到「<」的值,並會彈出一個警告窗口並顯示該值。這裏是我 迷失方向,無法讓它工作。當你第三次點擊它時,會彈出 循環或其他任何稱呼它 - 無論如何,它會顯示2次警報窗口,並且
然後如果你重複相同的點擊,它會做同樣的事情3次,所以它會。

    function hideOrShow() { 
         var hideButton = document.getElementsByClassName('hideButton'); 
         for (var j = 0; j < hideButton.length; j++) { 
          hideBtn = hideButton[j]; 
          hideBtn.addEventListener('click', function() { 
           var hideElBtn = event.srcElement; 
           var valueHideBtn = hideElBtn.textContent; 
           alert(valueHideBtn); 
          }, false); 
         } 
        } 
       }, false); 
      } 
     } 
     window.onload = addListeners; 
    </script> 
</body> 
</html> 

本練習的目標是,

  • 當您單擊添加按鈕添加從輸入字段的文本和文本添加到新行

  • 和「<」應隱藏的行並將其更改爲「>」再次顯示它

  • 和「X」應直接刪除的行。

但我需要幫助的是找到我上面提到的價值部分。

+0

你的錯誤在於你的'hideOrShow'函數。您的hideButton上已經有一個事件偵聽器,但是您可以循環並在該函數中添加第二個事件偵聽器,您添加的第二個偵聽器將選擇textContent。你可以避開那個事件監聽器,你會沒事的。 –

回答

0

這是我的JavaScript返工。我在你的評論中解釋了我的解決方案,但如果說明的話可能會更清楚。

addListeners函數中,我刪除了hideOrShow調用,因爲它不應該在添加按鈕中調用。

接下來,我刪除了hideOrShow方法中的for循環,因爲您確實只在調用方之後。我還以相同的方法刪除了addEventListener調用,因爲您已經在該元素上有一個事件偵聽器,所以不需要再添加一個。

var rownr = 0; 
    function addListeners() { 
     var addButton = document.getElementsByClassName('AddBtn'); 
     for (var i = 0; i < addButton.length; i++) { 
      var addBtn = addButton[i]; 
      addBtn.addEventListener('click', function() { 
       var elBtn = event.srcElement; 
       var valueBtn = elBtn.textContent; 
       alert(valueBtn); 

       //hideOrShow(); 
       addRow(); 

       function addRow() { 
        switch (valueBtn) { 
         case "Add": 

          var input = document.getElementById('txtBox').value; 
          rownr++; 

          var div = document.createElement('div'); 
          div.className = "row"; 
          document.getElementById("main").appendChild(div); 

          var div2 = document.createElement('div'); 
          div2.className = "hideButton colorGreen"; 
          var tx = document.createTextNode("<"); 
          div2.appendChild(tx); 
          div2.addEventListener('click', hideOrShow, false); 
          div.appendChild(div2); 
          var div3 = document.createElement("div"); 
          if (input.toLowerCase() == "red") { 
           div3.className = "mainText colorRed"; 
          } 
          else if (input.toLowerCase() == "orange") { 
           div3.className = "mainText colorOrange"; 
          } 
          else if (input.toLowerCase() == "blue") { 
           div3.className = "mainText colorBlue"; 
          } 
          else if (input.toLowerCase() == "yellow") { 
           div3.className = "mainText colorYellow"; 
          } 
          else if (input.toLowerCase() == "gray") { 
           div3.className = "mainText colorGray"; 
          } else { 
           div3.className = "mainText colorWhite"; 
          } 
          tx = document.createTextNode(rownr + " " + input); 
          div3.appendChild(tx); 
          div.appendChild(div3); 

          var div4 = document.createElement("div"); 
          div4.className = "deleteButton colorRed"; 
          tx = document.createTextNode("X"); 
          div4.appendChild(tx); 
          //div4.addEventListener('click', deleBtn, false); 
          div.appendChild(div4); 

          var linebreak = document.createElement("br"); 
          div.appendChild(linebreak); 
         default: 
        } 
       } 
       function hideOrShow() { 
        var hideButton = document.getElementsByClassName('hideButton'); 
        var hideElBtn = event.srcElement; 
        var valueHideBtn = hideElBtn.textContent; 
        alert(valueHideBtn); 
       } 
      }, false); 
     } 
    } 
    window.onload = addListeners; 
+1

好的。所以這就是爲什麼它採取這樣的行動,即時通訊真的很棒,你花時間,並告訴我我做錯了什麼。所以我可以繼續前進,繼續學習更多關於JavaScript的知識 –

相關問題