【问题标题】:In multiple rows of data, the datepicker only changes the first row of data在多行数据中,datepicker只改变第一行数据
【发布时间】:2015-05-07 18:23:09
【问题描述】:

我似乎对 jQuery UI Datepicker 有一个奇怪的问题。如果它位于包含多行数据的表中,即使用户单击更下方的行,它也会更改第一行中的日期。

观点:

= form_tag bar_foo_path(@bar.id, @foo.id), id: "order-costs", method: :patch do |f|
  %table.table.table-bordered.table-select
    - @all_foos.each do |foo|
      %tr
        = fields_for "all_foos[]", foo do |p|
          %td= p.text_field :cf_date, value: formatted_date(foo.cf_date), maxlength: '10', placeholder: 'yyyy-mm-dd', class: 'save-data datepicker'

JavaScript:

$(document).ready(function() {
  $(".datepicker").datepicker({
    dateFormat: "yy-mm-dd"
  }).prop('readonly', true);
});

奇怪的是它只影响单独的行。如果一行中有多个日期选择器,则该行中的日期选择器正常工作。它只影响其他行中的类似数据。

想法?

我已经看过这个答案了:

Datepicker only changes date in first row of table。这涉及将日期选择器添加到呈现页面后添加的行。

【问题讨论】:

    标签: jquery ruby-on-rails jquery-ui datepicker


    【解决方案1】:

    我已经解决了这个问题。当您将fields_fortext_field 一起使用时,它将根据fields_fortext_field 对象名称生成输入名称。在我的例子中,因为我有 fields_for 使用 all_foos[],它正在生成一个名为 all_foos__cf_date 的输入。该类型的所有输入都具有该名称,而 datepicker 只是用该名称填充第一个输入。

    我通过将 all_foos[] 更改为 all_foos[#{foo.key}] 来解决此问题。

    【讨论】:

      【解决方案2】:

      你不能用...

      f.fields_for :all_foos do |p|
        p.text_field(....)
      

      通常它应该创建像all_foos_0_cf_date, all_foos_1_cf_date这样的输入

      【讨论】:

      • 恐怕这行不通。当我尝试这样做时,它会创建像all_foos[cf_date] 这样的输入。我还尝试将form_tag 转换为form_for,它创建了foo[all_foos][cf_date] 之类的输入。也许是因为我的其余代码?
      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 2013-10-14
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2021-03-30
      • 2018-06-17
      • 2018-07-28
      相关资源
      最近更新 更多