【问题标题】:jQuery selecting multiple form fields in a Rails one to many nested model formjQuery在Rails一对多嵌套模型表单中选择多个表单字段
【发布时间】:2012-10-19 10:55:10
【问题描述】:

很抱歉,这个问题有些复杂。希望有人有耐心阅读这篇文章。

我有一个嵌套模型表单,很像这个 Railscast 中的那个: http://railscasts.com/episodes/196-nested-model-form-revised

我的模型与 Railscast 中的嵌套表单字段非常相似。 有很多问题有很多答案的调查。

我正在应用一个 jQuery-UI“自动完成”元素来使所有答案表单字段成为一个自动完成元素。但是,因为是嵌套表单域,所以我的文档中有很多答案域。这通常不是问题,但我需要在显示标签但提交自动完成选择的 ID 时应用此解决方案。 Autocomplete applying value not label to textbox

当我采用上面链接中的解决方案时,会发生什么情况,标签会应用于我文档中的每个“答案表单字段”,而不仅仅是我想要的那个。因为我使用的是嵌套表单,并且必须将自动完成逻辑应用于每个“答案表单字段”,所以我必须通过此选择器 '[type="text"][name*="[answer]"]' 选择它们这不是很具体,但尽我所能。

我绞尽脑汁想知道如何使用 jQuery 选择器来选择特定的答案字段而不是所有答案字段。

非常感谢您的任何帮助。

【问题讨论】:

    标签: ruby-on-rails jquery-selectors jquery-ui-autocomplete nested-forms


    【解决方案1】:
    $('[type="text"][name*="[answer]"]').autocomplete
    source: $('[type="text"][name*="[answer]"]').data('autocomplete-source')
    select: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
      $(this).siblings('[name*="[hidden]"]').val ui.item.value
    focus: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
    

    这是我最终使用的咖啡脚本代码。感谢@cdesrosiers 的回答。我意识到我已经为每个答案文本字段获得了唯一的 ID。因此,作为我问题的第二部分,我需要一种使用 jQuery 选择器的方法,该方法允许我将 .autocomplete jQuery 方法应用于包含名称 [answer] 的所有文本字段。

    然后与这个问题有关( Autocomplete applying value not label to textbox ),我需要一种方法来选择特定的答案文本字段,因为我有一个包含许多答案文本字段的表单。答案是使用 jQuery 选择器 $(this) 来引用“this”特定的答案文本字段。希望这可以帮助其他尝试学习 jQuery 选择器的人。

    jQuery this selector 是一个帮助我解决这个问题的有用问题。

    @cdesrosiers,你能用我的补充更新你的答案吗?我可以将你的回复标记为答案?

    【讨论】:

      【解决方案2】:

      假设您的Question 模型accepts_nested_attributes_for 您的Answer 模型,您可以按如下方式设置您的模板:

      <%= form_for @question do |question_builder| %>
        <% @question.answers.each_with_index do |answer, i| %>
          <% question_builder.fields_for :answers, answer do |answer_builder| %>
            <%= answer_builder.text_field :content, :id => "answer-#{i}" %>
          <% end %>
        <% end %>
      <% end %>
      

      加载了与@question 关联的先前保存的答案(或构建的新答案)后,您可以使用它来遍历索引为i 的答案,并使用唯一的html id 为每个答案呈现输入“ answer-i",您可以使用它来唯一地标识您的 jQuery 答案。

      希望这就是你要找的东西。

      【讨论】:

      • 感谢您的回答。我认为这应该可行,但我只是想让它与我的表单部分一起使用。我的结构类似于嵌套字段表单的 Railscast 示例。当我有它的工作时会报告
      • 实际上,我意识到我已经根据时间戳(根据 Railscasts 的 link_to_add_fields 辅助方法)为我的“答案”文本字段生成唯一 ID。现在我有了唯一的 ID,我如何使用 jQuery 选择器将 .autocomplete 功能应用于所有“Answer”文本字段,但仅将特定标签应用于 1 个“Answer”文本字段。所以这更像是一个 jQuery 选择器问题
      • 我能弄明白。我正在将我的 .autocomplete 逻辑应用于名称中带有 How to Answer 的所有文本字段。然后我使用 $(this) 来应用后续的 jQuery 逻辑。我将在代码块中添加答案以进一步解释
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多