Javascript JQuery单击方法错误还是编程错误?

Javascript JQuery单击方法错误还是编程错误?,javascript,jquery,Javascript,Jquery,我一直在学习JQuery,但遇到了一个错误 $(document).ready(function(){ $("#gbutton").click(function( tries = $("#guesses").val(), guess = $("#guess").val(), rnumber = $("#rnumber").val() || (Math.f

我一直在学习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;
    });
});

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

将变量包含在错误的位置。varstries、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;
  });
}); 

在您的代码中,“尝试”被事件覆盖。这就是为什么加上“x”就可以工作的原因。因为现在“x”被覆盖,您不需要“x”。

click事件的jQuery事件处理程序应该具有非常特定的签名-。jQuery不会通过传递三个参数来调用匿名函数。该参数将仅为一个,它将成为事件对象


我被你的“它返回一个对象”语句弄糊涂了。val应该返回一个字符串,但是您应该注意在函数的参数中定义变量的语法是不正确的。一个更完整的逻辑样本和相关的HTML可能会在这里有所帮助。对不起。发生的是$guesss.valtries-1;将原始值更改为NaN。使用console.log检查trys的初始值,表示trys是一个对象。trys、guess和rnumber不是变量,而是它们的参数。我一直都明白,如果没有指定其他参数,函数examplex=10{…}会将10作为默认参数传递。您可以这样设置默认值,但如果传入值,它们将被覆盖。这就是发生在我们身上的事情。它正在被传入的事件处理程序覆盖。那好吧。我对事件对象和它的目的有点困惑,但我不这么理解。非常感谢。
$(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;
  });
}); 
$("#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);
  }
});