javascript - 如何使用 JQuery 添加 number_field_tag 的值

标签 javascript jquery ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

抱歉,我是在 Rails 中使用 Javascript 的新手。

我有 4 个 number_field_tags。 每当用户输入一个数字时,它将对所有 4 个 number_field_tag 的数字求和。我想知道我该怎么做。

我试过按照这个 http://jsperf.com/jq-sum-elements-vs-raw-js但我不知道如何调用该函数。

<td class="method2">
                <p>Input the number of each base the primer should have</p>
                <label>Number of A :</label>
                <%= number_field_tag(:no_A,nil, in:0...36) %><br />
                <label>Number of T :</label>
                <%= number_field_tag(:no_T,nil, in:0...36) %><br />
                <label>Number of G :</label>
                <%= number_field_tag(:no_G,nil, in:0...36) %><br />
                <label>Number of C :</label>
                <%= number_field_tag(:no_C,nil, in:0...36) %><br />
                Total bases:<span></span>
</td>   

如何显示当前的总碱基数?

最佳答案

如果我正确理解了您的问题,您有 4 个具有基础的事物,并且您希望在用户在 number_field_tags 中输入信息时动态地向用户显示所有基础。为实现这一点,我使用上面的代码片段并将“bases”类分配给每个 number_field_tags,并将“total-bases”的 id 分配给要显示总数的范围。

<td class="method2">
  <p>Input the number of each base the primer should have</p>
  <label>Number of A :</label>
  <%= number_field_tag(:no_A,nil, in:0...36, class: 'bases') %><br />
  <label>Number of T :</label>
  <%= number_field_tag(:no_T,nil, in:0...36, class: 'bases') %><br />
  <label>Number of G :</label>
  <%= number_field_tag(:no_G,nil, in:0...36, class: 'bases') %><br />
  <label>Number of C :</label>
  <%= number_field_tag(:no_C,nil, in:0...36, class: 'bases') %><br />
  Total bases:<span id="total-bases"></span>
</td>

然后我写了下面的 jQuery 代码:

$(document).on("keyup change", ".bases", function() {
  totalSides();
});

function totalSides() {
  var tmp = 0;
  var total = 0;
  $(".bases").each(function() {
    tmp = parseInt($(this).val(), 10);
    if (isNaN(tmp)) {
      tmp = 0;
    };
    total = total + tmp;
  });
  $("#total-bases").html(total);
};

它所做的是在 number_field_tag 框中的任何 keyup 或更改上,函数 totalSides 将运行。 totalSides 函数将临时变量 (tmp) 设置为 0,并将变量 total 设置为 0。然后它使用类“bases”迭代每个 number_field_tag。它将内容解析为整数。如果输入不是数字 (isNaN),它会通过将 tmp 设置为 0 来转储它,否则它会将变量 total 设置为 td 中所有 number_field_tags 内的值的总和。

然后它将 span 中的 html 设置为此总数。

我想这就是您要找的,希望对您有所帮助。如果您还有其他问题,请告诉我,我会尽力提供帮助。

只需重新考虑您的验证问题并意识到,您可以只使用内置的 number_field_tag 选项。您可以使用:

min: 6
max: 36

或者更简单,我们 :in => 6...36

in: 6...37

作为每个 number_field_tag 的选项。这比我的第一个想法要简单得多...使用 jQuery Validation 插件库...不过,当您想对不太容易添加的事物进行验证时,熟悉 Validation 库是一件好事作为 rails 表单助手的选项。

您的原始代码使用 in: 0...36 - 应该像将 0 更改为 6 以及将 36 更改为 37 一样简单,从而为您提供 6-36 的允许范围。如果不是,请告诉我,我将重新包含一些 jQuery 验证代码并让您走上这条路。

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/number_field_tag

http://jqueryvalidation.org/documentation/

这是 jQuery 验证方法的一些示例代码:

jQuery.validator.addMethod("no-zero", function(value, element) {
return this.optional(element) || !/^0$/.test(value);
}, "Cannot be zero.");

基本上,只需将 Regex 替换为正确的正则表达式以验证 6 到 36 之间的值,然后编写您希望在用户违反时抛出的错误消息。

关于javascript - 如何使用 JQuery 添加 number_field_tag 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19691316/

相关文章:

javascript - 如何通过子节点递归并输出为json?

javascript - 按键检查不起作用

ruby-on-rails - Rails 5 破坏了 send_file 方法?

ruby-on-rails - Rails has_many不为空

ruby-on-rails - 在 Rails 中自动填写表单字段?

javascript - addEventListener 将调用者作为参数传递

javascript - 如何为论坛中的永久链接生成二维码?

javascript - 检查一个div是否为空

jquery - 使用 jQuery 重命名 Bootstrap 选项卡

asp.net - jQuery:Ajax 调用 asp.net webservice 失败,服务器返回 500 错误