【问题标题】:Can someone explain why my code isn't working correctly?有人可以解释为什么我的代码不能正常工作吗?
【发布时间】:2017-11-12 17:36:43
【问题描述】:

目标是在 3*3 的网格中创建 9 个按钮,并将两个单词作为两个输出输出。我尝试使用事件侦听器方法,但似乎无法弄清楚为什么它不起作用。有人可以给我一些指示吗?使用警报不是正确的选择。我很确定我的功能是问题所在。是否可以创建单击每个按钮后弹出的文本框?

<html>
<head>
    <title> Device Control</title>
</head>

<body> 
    <table>
    <tr>
        <th> <button id="myBtn1">Try it </button> </th>
        <th> <button id="myBtn2">Be Careful </button> </th>
        <th> <button id="myBtn3"> Look AHEAD </button> </th>
    </tr>
    <tr>
        <tH> <button id="myBtn4"> behind you</button> </th>
        <th> <button id="myBtn5"> AHHHHHA</button> </th>
        <th> <button id="myBtn6"> Bloooooddd</button> </th>
</tr>
    <tr>
        <th> <button id="myBtn7"> I am deeeaaaddddd </button> </th>
        <th>  <button id="myBtn8"> NOOOOOO </button> </th> 
        <th> <button id="myBtn9"> THE LIGHT</button> </th>
    <tr>
</table>

<script>

document.getElementById("myBtn1").addEventListener("click", myFunction1);

function myFunction1() {
  alert ("left"
    "up");
}


document.getElementById("myBtn2").addEventListener("click", myFunction22);

function myFunction2() {
    alert ("off"
        "up");
    }


document.getElementById("myBtn3").addEventListener("click", myFunction3);

function myFunction3() {
    alert ("right");
   }


   document.getElementById("myBtn4").addEventListener("click", myFunction4;

function myFunction4() {
  alert ("left"
        "off");
}

   document.getElementById("myBtn5").addEventListener("click", myFunction5);
function myFunction5() {
    alert ("off"
    "off");
}


   document.getElementById("myBtn6").addEventListener("click", myFunction6);
function myFunction6() {
   alert ("right"
    "off");
}

   document.getElementById("myBtn7").addEventListener("click", myFunction7);
function myFunction7() {
 alert ("left"
    "down");
}
   document.getElementById("myBtn8").addEventListener("click", myFunction8);
   function myFunction8() {
     alert ("off"
        "down");
}

    document.getElementById("myBtn9").addEventListener("click", myFunction9);
   function myFunction9() {
    alert ("right"
        "down");
}


</script>
</body>
</html>

【问题讨论】:

  • The goal is - 但结果如何
  • 这可以用更短更优雅的方式完成
  • 首先你的代码中有几个错别字,这甚至不会运行:myFunction22 有一个额外的2,在("click", myFunction4; 处缺少一个),等等。至少看看至少在问这里之前检查控制台,据我所知,没有任何努力调试或发现此代码的问题。

标签: javascript html


【解决方案1】:

是否可以创建单击每个按钮后弹出的文本框?是的。出于基本目的,您可以使用 prompt() 方法。例如:

var employee = prompt("Name of employee");

并将值存储在变量中以备将来使用。

你也应该这样尝试 addEventListener()

var btn = document.getElementById("myBtn2");
btn.addEventListener('click', myFunction22);

看起来更干净。

【讨论】:

    【解决方案2】:

    由于以下原因,代码无法正常工作

    1. myFunction22 未定义

    2. 这里没有右括号 ) document.getElementById("myBtn4").addEventListener("click", myFunction4

    3. 对于多行字符串,使用+ 连接字符串或使用反引号(`)

    document.getElementById("myBtn1").addEventListener("click", myFunction1);
    
    function myFunction1() {
      alert("left up");
    }
    //myFunction22 is not defined changed it to myFunction2
    document.getElementById("myBtn2").addEventListener("click", myFunction2);
    
    function myFunction2() {
      alert("off up");
    }
    
    document.getElementById("myBtn3").addEventListener("click", myFunction3);
    
    function myFunction3() {
      alert("right");
    }
    
    //typo here no closing braces.Closing braces added
    document.getElementById("myBtn4").addEventListener("click", myFunction4);
    
    function myFunction4() {
      alert("left off");
    }
    
    document.getElementById("myBtn5").addEventListener("click", myFunction5);
    
    function myFunction5() {
      alert("off off");
    }
    
    
    document.getElementById("myBtn6").addEventListener("click", myFunction6);
    
    function myFunction6() {
      alert("right off");
    }
    
    document.getElementById("myBtn7").addEventListener("click", myFunction7);
    
    function myFunction7() {
      alert("left down");
    }
    document.getElementById("myBtn8").addEventListener("click", myFunction8);
    
    function myFunction8() {
      alert("off down");
    }
    
    document.getElementById("myBtn9").addEventListener("click", myFunction9);
    
    // Used backtick (`) for multiline string
    function myFunction9() {
      alert(`right
        down`);
    }
    <table>
      <tr>
        <th> <button id="myBtn1">Try it </button> </th>
        <th> <button id="myBtn2">Be Careful </button> </th>
        <th> <button id="myBtn3"> Look AHEAD </button> </th>
      </tr>
      <tr>
        <tH> <button id="myBtn4"> behind you</button> </th>
        <th> <button id="myBtn5"> AHHHHHA</button> </th>
        <th> <button id="myBtn6"> Bloooooddd</button> </th>
      </tr>
      <tr>
        <th> <button id="myBtn7"> I am deeeaaaddddd </button> </th>
        <th> <button id="myBtn8"> NOOOOOO </button> </th>
        <th> <button id="myBtn9"> THE LIGHT</button> </th>
        <tr>
    </table>

    【讨论】:

      【解决方案3】:

      检查这个更新的sn-p

      因此,我建议的编辑不是将整个 document.addEventListener 写入每个元素,您只需创建一个全局单击侦听器,然后使用 switch case 来处理不同 id 上的不同按钮单击,这使得程序简单而干净,而不是编写多个函数,第三个在你的 alert("off""down") 是不正确的 js 在 js 你不能使用这种语法可能正确的语法是 alert("off","down") 或 alert( "off down") 或 alert("off"+"down")。你已经多次犯了这个错误,所以请避免

      <html>
      <head>
          <title> Device Control</title>
      </head>
      
      <body> 
          <table>
          <tr>
              <th> <button id="myBtn1">Try it </button> </th>
              <th> <button id="myBtn2">Be Careful </button> </th>
              <th> <button id="myBtn3"> Look AHEAD </button> </th>
          </tr>
          <tr>
              <tH> <button id="myBtn4"> behind you</button> </th>
              <th> <button id="myBtn5"> AHHHHHA</button> </th>
              <th> <button id="myBtn6"> Bloooooddd</button> </th>
      </tr>
          <tr>
              <th> <button id="myBtn7"> I am deeeaaaddddd </button> </th>
              <th>  <button id="myBtn8"> NOOOOOO </button> </th> 
              <th> <button id="myBtn9"> THE LIGHT</button> </th>
          <tr>
      </table>
      
      <script>
      
       document.addEventListener('click', function(e) {
              console.log(e.target.id)
              if (e.target) { //do something
                  clickFunctions(e.target.id)
              }
          })
      
      function clickFunctions(key){
        switch(key){
          case 'myBtn1':
           alert ("left up");
          break;
          case 'myBtn2':
          alert ("off up"); 
          break;
          case 'myBtn3':
          alert ("right");
          break;
          case 'myBtn4':
           alert ("off off");
          break;
          case 'myBtn5':
           alert ("right off");
          break;
          case 'myBtn6':
          alert ("left down");
          break;
          case 'myBtn7':
          alert ("left down");
          break;
          case 'myBtn8':
          alert ("off down");
          break;
          case 'myBtn9':
          alert ("right down");
          break;
          default:
          console.log('no action');
        }
        return ;
      }
      
      // document.getElementById("myBtn1").addEventListener("click", myFunction1);
      
      // function myFunction1() {
      //   alert ("left"
      //     "up");
      // }
      
      
      // document.getElementById("myBtn2").addEventListener("click", myFunction22);
      
      // function myFunction2() {
      //     alert ("off"
      //         "up");
      //     }
      
      
      // document.getElementById("myBtn3").addEventListener("click", myFunction3);
      
      // function myFunction3() {
      //     alert ("right");
      //    }
      
      
      //    document.getElementById("myBtn4").addEventListener("click", myFunction4;
      
      // function myFunction4() {
      //   alert ("left"
      //         "off");
      // }
      
      //    document.getElementById("myBtn5").addEventListener("click", myFunction5);
      // function myFunction5() {
      //     alert ("off"
      //     "off");
      // }
      
      
      //    document.getElementById("myBtn6").addEventListener("click", myFunction6);
      // function myFunction6() {
      //    alert ("right"
      //     "off");
      // }
      
      //    document.getElementById("myBtn7").addEventListener("click", myFunction7);
      // function myFunction7() {
      //  alert ("left"
      //     "down");
      // }
      //    document.getElementById("myBtn8").addEventListener("click", myFunction8);
      //    function myFunction8() {
      //      alert ("off"
      //         "down");
      // }
      
      //     document.getElementById("myBtn9").addEventListener("click", myFunction9);
      //    function myFunction9() {
      //     alert ("right"
      //         "down");
      // }
      
      
          </script>
          </body>
          </html>
      

      【讨论】:

        【解决方案4】:

        “myFunction22”出现错误。如果你打开 Dev Tools Console,你会看到

        Uncaught ReferenceError: myFunction22 is not defined

        把它改成“myFunction2”就可以了。

        你还需要用“加号”连接你的字符串:

        alert ("left" +
            "off");
        

        没有它你会得到

        Uncaught SyntaxError: missing ) after argument list

        结论:开始使用控制台(ChromeFF)调试您的代码!


        另外,你的代码可以用一千种方式重构,例如:

        var messages = ["left-up", "off-up", "etc", "etc", "etc", "etc", "etc", "etc", "etc"];
        
        for(var i = 0 ; i < 10; i++) {
          document.getElementById("myBtn" + (i + 1)).addEventListener("click", generateMyFunction(i));
        }
        
        function generateMyFunction(index) {
          return function() {
              alert(messages[index]);
            }
        }
        

        【讨论】:

          【解决方案5】:

          注意: Internet Explorer 8 及更早版本不支持 addEventListener() 方法。因此,我给您提供另一种解决方案供您参考。

          以下是没有按钮 ID 的示例代码。

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE>Device Control</TITLE>
          </HEAD>
          <BODY>
              <TABLE>
                  <TBODY>
                      <TR>
                          <TH><BUTTON onclick=myFunction1()>Try it</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction2()>Be Careful</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction3()>Look AHEAD</BUTTON> </TH>
                      </TR>
                      <TR>
                          <TH><BUTTON onclick=myFunction4()>behind you</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction5()>AHHHHHA</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction6()>Bloooooddd</BUTTON> </TH>
                      </TR>
                      <TR>
                          <TH><BUTTON onclick=myFunction7()>I am deeeaaaddddd</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction8()>NOOOOOO</BUTTON> </TH>
                          <TH><BUTTON onclick=myFunction9()>THE LIGHT</BUTTON> </TH>
                     </TR>
                  </TBODY>
              </TABLE>
              <SCRIPT>
                  function myFunction1() {alert("left up");}
                  function myFunction2() {alert("off up");}
                  function myFunction3() {alert("right");}
                  function myFunction4() {alert("left off");}
                  function myFunction5() {alert("off off");}
                  function myFunction6() {alert("right off");}
                  function myFunction7() {alert("left down");}
                  function myFunction8() {alert("off down");}
                  function myFunction9() {alert("right down");}
              </SCRIPT>
          </BODY>
          </HTML>
          

          如果你真的需要你的按钮 ID,请参考这个。

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          </HEAD>
          <BODY>
              <TABLE>
                  <TBODY>
                      <TR>
                          <TH><BUTTON id=myBtn1>Try it</BUTTON> </TH>
                          <TH><BUTTON id=myBtn2>Be Careful</BUTTON> </TH>
                          <TH><BUTTON id=myBtn3>Look AHEAD</BUTTON> </TH>
                      </TR>
                      <TR>
                          <TH><BUTTON id=myBtn4>behind you</BUTTON> </TH>
                          <TH><BUTTON id=myBtn5>AHHHHHA</BUTTON> </TH>
                          <TH><BUTTON id=myBtn6>Bloooooddd</BUTTON> </TH>
                      </TR>
                      <TR>
                          <TH><BUTTON id=myBtn7>I am deeeaaaddddd</BUTTON> </TH>
                          <TH><BUTTON id=myBtn8>NOOOOOO</BUTTON> </TH>
                          <TH><BUTTON id=myBtn9>THE LIGHT</BUTTON> </TH>
                      </TR>
                  </TBODY>
              </TABLE>
              <SCRIPT type=text/javascript>
                  document.getElementById("myBtn1").onclick = function myFunction1() { alert("left up"); }
                  document.getElementById("myBtn2").onclick = function myFunction2() { alert("off up"); }
                  document.getElementById("myBtn3").onclick = function myFunction3() { alert("right"); }
                  document.getElementById("myBtn4").onclick = function myFunction4() { alert("left off"); }
                  document.getElementById("myBtn5").onclick = function myFunction5() { alert("off off"); }
                  document.getElementById("myBtn6").onclick = function myFunction6() { alert("right off"); }
                  document.getElementById("myBtn7").onclick = function myFunction7() { alert("left down"); }
                  document.getElementById("myBtn8").onclick = function myFunction8() { alert("off down"); }
                  document.getElementById("myBtn9").onclick = function myFunction9() { alert("right down"); }
              </SCRIPT>
          </BODY>
          </HTML>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-07-26
            相关资源
            最近更新 更多