动态更改rails复选框的ID,并使用jquery获取每个复选框

时间:2014-10-21 20:18:03

标签: jquery ruby-on-rails ruby-on-rails-4

在循环遍历rails变量时,我无法创建单个id。我不是每个“产品”在“开关”上都有自己的ID,所以我可以在选择下拉列表中的一个元素后激活开关。

我的表格:

        = form_tag orders_path, id: 'payment-form' do
      - @foo.products.each do |product|
        %li.bullet-item 
          .product.panel
            .small-12
              %h4
                = content_tag_for :li, product, :value => product.id do
                  .row
                    .small-2.columns.switch
                      %input#switchName{:type => "checkbox"}/
                      %label{:for => "switchName"}
                    .small-7.columns
                      = hidden_field_tag("order_products[][product_id]", product.id)
                      = product.name
                      %br
                      .subheader= number_to_currency(product.cost_in_cents.to_f/100)

                    .small-3.columns
                      = select_tag("order_products[][quanity]", options_for_select([0,1,2,3,4,5,7,8,9,10,11,12,13,14,15]), "data-cost-per-unit" => product.cost_in_cents, id: product.name, class: 'thing')

我的jQuery

:javascript
  $('.thing').change(function() {
    $('#switchName').click();
  });

这将点击第一个开关,但问题是两个开关都被命名为'switchName'。选择数量后,我希望它单击与之关联的开关。

如您所见,如果我有两个呈现的产品,它们都具有相同的ID。

whats rendered

如何点击不同产品的不同开关?

2 个答案:

答案 0 :(得分:1)

 - @foo.products.each_with_index do |product, index|

然后使用索引将输入的id设置为“switchName#{index}”

答案 1 :(得分:0)

如果你想保持自己的方式,你可以使用自己的自定义绑定。例如:

%input#switchName{:type => "checkbox", :prodid => product.id}

然后使用

$('#switchname').on('change',function() {
    var product_id = $(this).attr("prodid");
    // do some more of your magic here
});