简体   繁体   English

如何在Rails中的部分中更新jQuery Datepicker

[英]How to update a jquery datepicker in a partial in rails

I have a partial that has two datepickers to show the beginning and ending of data to be displayed in another partial. 我有一个带有两个日期选择器的部分,以显示要在另一个部分中显示的数据的开始和结束。 I also have a dropdown to determine the date ranges for some predetermined events. 我还有一个下拉菜单,用于确定某些预定事件的日期范围。 Trouble is, changing the dropdown does not update the content of the datepickers. 问题是,更改下拉列表不会更新日期选择器的内容。 Secondarily, I'd also like that changing either of the datepickers will cause the dropdown to revert to the default of 'No Event', and that's also not working. 其次,我还希望更改两个日期选择器都将导致下拉列表恢复为默认值“无事件”,并且这也行不通。 I'm also a bit of a novice when it comes to javascript and rails, as will probably be evident in my code. 关于javascript和rails,我还是一个新手,这可能在我的代码中显而易见。

The partial with the date ranges and javascript: 带有日期范围和javascript的部分内容:

<script type="text/javascript" charset="utf-8">

  var set_default_dates = function() {
    var start = $("#_start_date")
    var end = $("#_end_date")
    var min_date = new Date("<%= @min_date.strftime("%m/%d/%Y") %>")
    var max_date = new Date("<%= @max_date.strftime("%m/%d/%Y") %>")
    start.datepicker('option', 'minDate', min_date);
    start.datepicker('option', 'maxDate', max_date);
    end.datepicker('option', 'minDate', min_date);
    end.datepicker('option', 'maxDate', max_date);
    start.datepicker("setDate", min_date);
    end.datepicker("setDate", max_date);

    var curr_start_date = new Date("<%= session[:dashboards][:start_date].strftime("%m/%d/%Y") %>");
    var curr_end_date = new Date("<%= session[:dashboards][:end_date].strftime("%m/%d/%Y") %>");
    window.alert(curr_start_date);
    start.datepicker("setDate", curr_start_date);
    end.datepicker("setDate", curr_end_date);
  }
  window.onload = set_default_dates;

</script>
<div class="form-inline"  style="width:240px">
  <table>
    <tr>
      <td>
        Start Date:
        <%= datepicker_input "", "start_date", data: {remote: true} %>
      </td>
    </tr>
    <tr>
      <td>
        End Date:
        <%= datepicker_input "", "end_date", data: {remote: true} %>
      </td>
    </tr>
  <tr>
    <td>
      Select Event:
      <%= select_tag(
        :chosen_event,
        options_for_select(get_event_names,
          session[:dashboards][:chosen_event]),
        data: {remote: true,
          chosen_event: :chosen_event
        }
      ) %>
    </td>
  </tr>
  </table>
</div>

The code in the controller that updates the session for date range updates: 控制器中用于更新会话以更新日期范围的代码:

  #just gets the first and last date from the database to determine ranges
  @min_date = get_first_date
  @max_date = get_last_date

  if params[:start_date] || params[:end_date]
    session[:dashboards][:chosen_event] == DashboardsHelper::NO_EVENT
  end

  if params[:chosen_event]
    session[:dashboards][:chosen_event] = params[:chosen_event]
    if params[:chosen_event] == DashboardsHelper::NO_EVENT
      session[:dashboards][:start_date] = @min_date
      session[:dashboards][:end_date] = @max_date
    else
      event = Event.order(:name).where(name: params[:chosen_event]).find(:all)[0]
      session[:dashboards][:start_date] = event.start
      if (event.end)
        session[:dashboards][:end_date] = event.end
      end
    end
  end
  ....

  respond_to do |format|
    format.html
    format.js
  end

and my index.js.erb includes the partial to be updated. 我的index.js.erb包含要更新的部分。 I know that the event selection is working, because the table updates appropriately, and same with the datepickers-- changing them causes the table to update as expected. 我知道事件选择是有效的,因为表会适当更新,并且与日期选择器相同-更改它们会导致表按预期进行更新。

I've tried experimenting with onSelect, but that doesn't seem to matter; 我曾尝试过onSelect,但这似乎无关紧要。 my best guess right now is that the curr_start_date and curr_end_date vars aren't getting updated, because that window.alert isn't firing. 我现在最好的猜测是curr_start_date和curr_end_date var没有得到更新,因为window.alert没有触发。 What is happening is that changing the event dropdown is emptying the contents of the datepickers. 正在发生的事情是不断变化的情况下下拉是排空datepickers的内容。 I've also tried this for my javascript: 我也尝试过使用我的JavaScript:

<script type="text/javascript" charset="utf-8">

  var set_current_dates = function(){

    var start = $("#_start_date")
    var end = $("#_end_date")
    var curr_start_date = new Date("<%= session[:dashboards][:start_date].strftime("%m/%d/%Y") %>");
    var curr_end_date = new Date("<%= session[:dashboards][:end_date].strftime("%m/%d/%Y") %>");
    window.alert(curr_start_date);
    start.datepicker("setDate", curr_start_date);
    end.datepicker("setDate", curr_end_date);
  }

  var set_default_dates = function() {
    var start = $("#_start_date")
    var end = $("#_end_date")
    var min_date = new Date("<%= @min_date.strftime("%m/%d/%Y") %>")
    var max_date = new Date("<%= @max_date.strftime("%m/%d/%Y") %>")
    start.datepicker('option', 'minDate', min_date);
    start.datepicker('option', 'maxDate', max_date);
    end.datepicker('option', 'minDate', min_date);
    end.datepicker('option', 'maxDate', max_date);
    start.datepicker("setDate", min_date);
    end.datepicker("setDate", max_date);
    set_current_dates();
  }
  window.onload = set_default_dates;
  $("#chosen_event").onchange = set_current_dates;

</script>

Again, the same behavior happens-- the datepickers blank out, and no alert is fired, even though the table updates appropriately. 再次发生相同的行为-日期选择器被清空,即使表进行了适当的更新,也不会发出警报。

What should I be doing to have the datepickers update to reflect a change in the select dropdown, and vice versa? 如何更新日期选择器以反映选择下拉列表中的更改,反之亦然?

By specifying the value of the input field by jquery , you can do this. 通过使用jquery指定输入字段的值,您可以执行此操作。 Like below 像下面

$('#_start_date').val(min_date);
$('#_end_date').val(max_date);

This will also update the selected date in the datepicker select dropdown. 这还将更新datepicker选择下拉列表中的选定日期。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM