javascript - jquery 添加新的选择选项并将数据发送到服务器

标签 javascript jquery html forms

我对收入字段进行了验证。如果我在未调用 jquery 代码时运行代码,则提交表单时不会出现任何验证问题。

但是,如果用户在第一个选择中选择“无收入”选项,则 jquery 将被调用并生成新的 $0在第二个选择表单中插入并选择。如果我检查新的 HTML 代码,一切看起来都不错(新选项已存在并已选中),但在提交时会引发“收入不能为空错误”。因此,由于某种原因,当验证运行时,它认为该字段为空。

我猜这与我的 jQuery 代码有关。我该如何解决这个问题?

表单(用于显示原始选择选项)

    <div class="form-group">
      <div><%= f.label :revenue_type, "Revenue Type" %></div>
      <%= f.select :revenue_type, ["recurring revenue", "non-recurring revenue", "no revenue"],
        { :selected => "recurring revenue" }, { "data-behavior" => "revenue-type-select", class: "form-control" } %>
    </div>

    <div class="form-group">
      <div><%= f.label :revenue %></div>
      <%= f.select :revenue, ["< $100k", "$100k < $1M", "> $1M"], {},
        { "data-behavior" => "revenue-number-select", class: "form-control" } %>
    </div>

jquery

$(document).on('change', '[data-behavior="revenue-type-select"]', function (event) {
  if ($(this).val() === "no revenue") {
    $('[data-behavior="revenue-number-select"]').append(new Option("$0", "$0"));
    $('[data-behavior="revenue-number-select"] option[value="$0"]').attr("selected", "selected").change();
    $('[data-behavior="revenue-number-select"]').prop("disabled", true);
  } 
  else {
    $('[data-behavior="revenue-number-select"] option[value="$0"]').remove();
    $('[data-behavior="revenue-number-select"]' ).prop("disabled", false);
  }
});

提交前调用 jquery 代码后的 HTML:

<select data-behavior="revenue-number-select" class="form-control" name="company[revenue]" id="company_revenue" disabled="">
  <option value="< $100k">< $100k</option>
  <option value="$100k < $1M">$100k < $1M</option>
  <option value="> $1M">> $1M</option>
  <option value="$0" selected="selected">$0</option>
</select>

更新

公司.rb

validates :revenue, presence: { message: "can't be blank" }

这将验证给定值是否为 nil或空如 ("", " ") 。这很奇怪,因为如果我选择任何原始选项,例如 < $100k然后验证通过。

最佳答案

您可以尝试直接更改选择,而不是更改所选属性

使用.propselectedIndex设置为选择列表的最后一个索引

查看演示:https://jsfiddle.net/7da197j4/1/

关于javascript - jquery 添加新的选择选项并将数据发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38183402/

相关文章:

html - 如何在子菜单项上添加最后一个边框

javascript - 如何应用js变量定义的css属性

javascript - 将 Javascript 放入 HTML 文件中

用于同步事件的 JavaScript 库

php - 在 Woocommerce 结帐页面中显示添加费用的复选框

javascript - 如何使用javascript或jquery将html表单数据保存到sql db

html - CSS:div "float:middle"而不是 "float:left;"是否可以带 margin-left?

javascript - 动态添加字段到 HTML 表单、发送数据并记住添加的字段和值

javascript - 学习 jQuery 的选项卡 + CSS Flexbox。任何人都可以帮助完成这项工作吗?

javascript - 模式打开时锁定背景