【问题标题】:Filling multiple inputs with randomized values in one button click一键单击用随机值填充多个输入
【发布时间】:2016-01-08 23:05:13
【问题描述】:

我正在尝试使用 jQuery 为在线角色创建器应用程序构建用户界面。我正在尝试通过单击一键随机生成角色统计信息。这是我第一次在不平凡的应用程序中使用 jQuery。

问题是,当我单击按钮时,表单内不会生成数字。如果我删除 disabled 属性,它仍然不起作用,所以我知道这不是问题。

如果我要尝试一下,我猜 jQuery 中的 $() 不喜欢使用变量,但如果是这样的话,我不知道这样做的正确方法是什么。在 jQuery 网站上单击填写多个表单的示例对此没有用处,因为我需要确保单独调用 dice 函数来填写每个表单。

我的 javascript 代码如下所示:

$(document).ready(function(){

    //stats as an array
    stats = ["#smarts", "#rwp", "#driving", "#cool", "#bod", "#luck", "#looks", "#bonk"];

    //roll dice function
    function dice (x, n, y) {
        var result = 0;
        for(i = 0; i < x; i++) {
            result = result + Math.floor((Math.random() * n) + 1);
        }
        result = result + y;
        return result;
    }

    //roll each stat function
    function rollStats(stats) { 
        for(stat in stats) {
            $(stat).val(dice(1, 6, 0));
        }
    }

    //on button click roll each stat
    $("#stats").click(rollStats(stats));

});

作为参考,我的 html 表单的相关部分如下所示:

  <form class="create-teenager">
      Smarts:
      <input type="number" name="smarts" id="smarts" disabled />
      <br/><br/>

      Relationship with Parents:
      <input type="number" name="rwp" id="rwp" disabled />
      <br/><br/>

      Driving:
      <input type="number" name="driving" id="driving" disabled />
      <br/><br/>

      Cool:
      <input type="number" name="cool" id="cool" disabled />
      <br/><br/>

      Bod:
      <input type="number" name="bod" id="bod" disabled />
      <br/><br/>

      Luck:
      <input type="number" name="luck" id="luck" disabled />
      <br/><br/>

      Looks:
      <input type="number" name="looks" id="looks" disabled />
      <br/><br/>

      Bonk:
      <input type="number" name="bonk" id="bonk" disabled />
      <br/><br/>

      <button id="stats">Roll Stats</button>
  </form>

【问题讨论】:

  • 只是出于好奇,这是在某处上课吗?与游戏中的角色和他们的统计数据非常相似的问题似乎经常被问到。不打扰你,只是想知道。
  • 不,这不是为了上课,刚刚完成学业,而是在我上这堂课的时候,我们唯一为商业应用程序编程过的东西。不过,我被一个更有经验的 Javascript 程序员建议这是一种很好的练习方式。

标签: javascript jquery loops random


【解决方案1】:

首先我建议您将按钮从表单中拉出或阻止默认设置。

试试这个fiddle。

<form class="create-teenager">
  Smarts:
  <input type="number" name="smarts" id="smarts" disabled />
  <br/><br/>

  Relationship with Parents:
  <input type="number" name="rwp" id="rwp" disabled />
  <br/><br/>

  Driving:
  <input type="text" name="driving" id="driving" />
  <br/><br/>

  Cool:
  <input type="number" name="cool" id="cool"  />
  <br/><br/>

  Bod:
  <input type="number" name="bod" id="bod" disabled />
  <br/><br/>

  Luck:
  <input type="number" name="luck" id="luck" disabled />
  <br/><br/>

  Looks:
  <input type="number" name="looks" id="looks" disabled />
  <br/><br/>

  Bonk:
  <input type="number" name="bonk" id="bonk" disabled />
  <br/><br/>

滚动统计

试试这个脚本

$(document).ready(function(){

  //stats as an array
  stats = ["#smarts", "#rwp", "#driving", "#cool", "#bod", "#luck", "#looks", "#bonk"];

  //roll dice function
  function dice (x, n, y) {
      var resultNumber = 0;
      for(i = 0; i < x; i++) {
          resultNumber = Math.floor((Math.random() * n) + 1) + y;
      }
      console.log(resultNumber);
      return resultNumber;
  }

  //on button click roll each stat
  $("#stats").click(function() { 
    for(stat in stats) {
        $(stats[stat]).val(dice(1, 6, 0));
    }
  });
});

【讨论】:

  • 比较我的代码和你的代码后,它看起来像 $("#stats").click();出于某种原因不接受我的 rollStats 函数。不知道为什么。我认为这与范围有关,但与 dice() 函数没有问题。不过,这绝对可以解决问题。
【解决方案2】:

你用错了它必须是:

for(stat in stats) {
    $(stats[stat]).val(dice(1, 6, 0));
}

【讨论】:

  • 感谢您指出这一点。我在语法上有点混淆了类似循环在其他语言中的工作方式。
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 2018-03-08
  • 1970-01-01
  • 2019-09-01
  • 2014-07-01
  • 2020-03-26
相关资源
最近更新 更多