一个 F.Select 是否在同一表单中影响另一个?(不需要)

one f.select is affecting another within the same form? (unwanted)

本文关键字:另一个 影响 不需要 表单 Select 是否 一个      更新时间:2023-09-26

我在添加新的 html 元素时遇到问题,例如:

<%= f.date_select :date, { id: "date-select"} %>

它会影响我已经存在的集合选择:

<%= f.collection_select :id,
                          Customer.where(business_id: current_customer.business_id),
                          :id,
                          :full_name,
                          { prompt: 'Select' },
                          { id: "colleague-select", onChange: "renderColCal(this)" } %>
通常,客户

可以从列表中选择另一个客户,触发 ajax 调用以使用所选客户的id呈现所选客户的日历。这本身工作正常。

但是,当我在窗体中进一步输入这个新的date_select选项,然后尝试使用 collection_select 时,ajax 调用无法完成,因为它试图查找id等于在另一个选择框中选择的日期年份的客户!!

下面是一个示例。我在date_select中选择了年份为"2012"的日期。然后我在collection_select中选择一个客户,并在控制台中收到这个:

Started GET "/calendars/calendar_change?colleagueID=2012" for 127.0.0.1 at 2016-02-01 11:38:01 +0000
Processing by CalendarsController#calendar_change as */*
  Parameters: {"colleagueID"=>"2012"}
  Customer Load (0.0ms)  SELECT  "customers".* FROM "customers"  WHERE "customers"."id" = ?  ORDER BY last_name ASC LIMIT 1  [["id", 2012]]
Completed 404 Not Found in 5ms
ActiveRecord::RecordNotFound (Couldn't find Customer with 'id'=2012):
  app/controllers/calendars_controller.rb:19:in `calendar_change'

这是我的JavaScript被调用:

function renderColCal(select){
    var colleagueID = select.value ;
    $.ajax({
            url: '/calendars/calendar_change',
            data:{
                colleagueID: $('select').val()
            }
        }
    )

}

为什么会这样?我该如何解决这个问题?谢谢!

问题是你的javascript。您提交的数据是

data:{
   colleagueID: $('select').val()
}

提交页面上第一个选择的值。如果你想走这条路,你必须使你传递给 $() 的选择器更具选择性(例如,使用选择框的 id)。

您实际上是在事件处理程序中较早地从选择框中检索值,但由于某种原因您没有使用它。这可能比使用 jquery 在选择元素已经传递给您时查找该元素更不容易出错。