JQuery单击方法错误或编程错误?

时间:2017-02-02 15:44:44

标签: javascript jquery

我一直在学习JQuery并遇到错误。

$(document).ready(function(){
    $("#gbutton").click(function( tries = $("#guesses").val(),
                                  guess = $("#guess").val(),
                                  rnumber = $("#rnumber").val() || (Math.floor(Math.random()*500)+1)){
        if (tries < 1) return;

        var result;
        if (guess == rnumber) result = "You win!";
        else if (guess > rnumber) result = "Too high!";
        else if (guess < rnumber) result = "Too low!";

        $("#guesses").val(tries-1);
        $("#rnumber").val(rnumber);
        $("#result").val(result);
        return;
    });
});

tries会返回一个对象而不是一个数字。我现在已经搞砸了一段时间,并最终修复了#34;它。事实上,我的修复没有任何意义。它只是有效。不过,我对它为何起作用感到困惑。

为了修复它,我最后只是在我的代码中添加了另一个参数:

.click(function(x,
                tries = $("#guesses").val(),
                guess = $("#guess").val(),
                rnumber = $("#rnumber").val() || (Math.floor(Math.random()*500)+1))

它只是有效。在这一点上,我只是被困惑了。我做错了什么?我做错了什么吗?为什么这样做?

2 个答案:

答案 0 :(得分:2)

click事件的jQuery事件处理程序应具有非常特定的签名 - https://api.jquery.com/click/。 jQuery不会调用你的匿名函数传递三个参数。该参数只有一个,它将event对象。

$("#gbutton").click(function(event) {
  var tries1 = $("#guesses").val(),
      guess1 = $("#guess").val(),
      rnumber1 = $("#rnumber").val() || (Math.floor(Math.random()*500)+1);

  check(tries1, guess1, rnumber1);      

  function check(tries, guess, rnumber) {
    if (tries < 1) 
      return;

    var result;
    if (guess == rnumber) 
      result = "You win!";
    else if (guess > rnumber) 
      result = "Too high!";
    else if (guess < rnumber) 
      result = "Too low!";

    $("#guesses").val(tries-1);
    $("#rnumber").val(rnumber);
    $("#result").val(result);
  }
});

答案 1 :(得分:1)

您将变量包含在错误的位置。变量(try,guess和rnumber)不应该作为参数传递。见下文:

$(document).ready(function(){
  $("#gbutton").click(function() {

    tries = $("#guesses").html(),
    guess = $("#guess").val(),
    rnumber = $("#rnumber").val() || (Math.floor(Math.random()*500)+1);
    if (tries < 1) return;

    var result;
    if (guess == rnumber) result = "You win!";
    else if (guess > rnumber) result = "Too high!";
    else if (guess < rnumber) result = "Too low!";

    $("#guesses").val(tries-1);
    $("#rnumber").val(rnumber);
    $("#result").val(result);
    return;
  });
}); 

在您的代码中,&#39;尝试&#39;被事件覆盖。这就是添加&#39; x&#39;使它工作。因为现在&#39; x&#39;正在被覆盖,你不需要&#39; x&#39;。