繁体   English   中英

如何在函数onclick中调用方法?

[英]How do I call a method within a function onclick?

我正在尝试创建一个游戏,告诉您与随机数相比您有多冷或多冷。 用户单击我要运行checkNumber方法的按钮。 我将如何处理? 在尝试学习时,请随时让我知道此代码的所有错误。

到目前为止,我已经在html中尝试过:

<button type="submit" id="userGuess" onclick="hotcold().checkNumber()"></button>

在JS中:

function hotcold(){
    var realNumber = 0;
    var newGame = function(){
        realNumber = Math.floor(Math.random() * 100)+1
        return realNumber
    }

    var checkNumber = function (){
         var userinput = parseInt(document.getElementById("userGuess").value);
         var message ;

         if ( userinput == realNumber){ message = " Good Job you did it"}
         else if (Math.abs(userinput - realNumber) > 30){ var message = "You're colder than cold "}
         else if (Math.abs(userinput - realNumber) <= 30 && Math.abs(userinput - realNumber) > 10 ){  message = " You're getting closer"}
         else if (Math.abs(userinput - realNumber) <= 10 && Math.abs(userinput - realNumber) > 2 ){ message = " You're hot, now im scared"}
         else if (Math.abs(userinput - realNumber) <= 2){ message = " If you don't get this by next turn, something wrong with you"}
         else { message = " skjdksjhdsk "}

         alert(realNumber);
         alert(message);
   }

   return realNumber;
}
<input type="text" id="userGuess></input>
<button onclick="checkNumber()">Click to Guess!</button>

<script> 

  var realNumber;
  var newGame = function(){
    realNumber = Math.floor(Math.random() * 100) + 1;
  };

  newGame();  

  var checkNumber = function (){
     var userinput = parseInt(document.getElementById("userGuess").value);
     var message;

     //Always use three '=' signs in Javascript when comparing values
     if (userinput === realNumber) { 
       message = " Good Job- you did it!"; 
       newGame();
     } else if (Math.abs(userinput - realNumber) > 30) { 
       // the 'message' variable was already declared. Don't use 'var' again here
       message = "You\'re colder than cold"; 
     } else if (Math.abs(userinput - realNumber) <= 30 && Math.abs(userinput - realNumber) > 10 ) { 
       message = "You\'re getting closer...";
     } else if (Math.abs(userinput - realNumber) <= 10 && Math.abs(userinput - realNumber) > 2 ) {
       message = "You\'re hot, now I\'m scared"; 
     } else if (Math.abs(userinput - realNumber) <= 2){
       message = "If you don\'t get this by next turn, something\'s wrong with you"; 
     }
     //Not sure why you would want to show the user the real number before he guessed it
     //alert(realNumber); 
     alert(message);
  };

</script>

这是另一个快速提示:通过将Math.abs(userinput - realNumber)的结果保存到变量中,可以为自己节省一些键入操作和一些不必要的函数调用:

 ...
 var userinput = parseInt(document.getElementById("userGuess").value);
 var difference =  Math.abs(userinput - realNumber); 
 var message;
 ...
 } else if (difference > 30) {
 ...

试试下面的代码

<button type="submit" id="userGuessButton"></button>

function hotcold(){
  var realNumber = 0;
  var newGame = function(){
        realNumber = Math.floor(Math.random() * 100)+1
        return realNumber
    }
 newGame();
var button = document.getElementById("userGuessButton");
button.addEventListener("click", function (){
checkNumber();
})
}
    var checkNumber = function (){


         var userinput = parseInt(document.getElementById("userGuess").value);

         var message ;

         if ( userinput == realNumber){ message = " Good Job you did it"}
         else if (Math.abs(userinput - realNumber) > 30){ var message = "You're colder than cold "}
         else if (Math.abs(userinput - realNumber) <= 30 && Math.abs(userinput - realNumber) > 10 ){  message = " You're getting closer"}
         else if (Math.abs(userinput - realNumber) <= 10 && Math.abs(userinput - realNumber) > 2 ){ message = " You're hot, now im scared"}
         else if (Math.abs(userinput - realNumber) <= 2){ message = " If you don't get this by next turn, something wrong with you"}
         else { message = " skjdksjhdsk "}

         alert(realNumber);
         alert(message);
      }

hotcold();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM