【问题标题】:Assign a jQuery variable to a Rails session variable将 jQuery 变量分配给 Rails 会话变量
【发布时间】:2016-09-22 22:23:20
【问题描述】:

我有一个带有年份和值的简单选择框 像这样

<div id="year_selection_area" class="controls text-center">
  <select class="form-control " name="Legislation year" id="dueYear">
    <OPTION VALUE='2017' >2017</OPTION>
    <OPTION VALUE='2016' >2016</OPTION>
    <OPTION VALUE='2015'>2015</OPTION>
    <OPTION VALUE='2014' >2014</OPTION>
    <OPTION VALUE='2013'>2013</OPTION>
    <OPTION VALUE='2012' >2012</OPTION>
    <OPTION VALUE='2011'>2011</OPTION>
    <OPTION VALUE='2010'>2010</OPTION>
    <OPTION VALUE='' DISABLED>MORE YEARS ADDED SOON</OPTION>
  </select>
</div>

我还通过 jQuery 和 rails 的组合在开头指定 selected

<% if session[:year_browsing]==nil%>
  <% session[:year_browsing] = 2016%>
<% else %>
  <%= session[:year_browsing] %>
<%end%>
<script  type="text/javascript">
  jQuery(document).ready(function($) {
    $('.form-control option[value=<%= session[:year_browsing] %>]').attr('selected','selected');
  });

但是我需要根据用户点击的内容更改会话变量 我尝试了一个 if/else 语句,但它一旦进入更改函数就会执行所有 ruby​​

$( ".form-control" ).change(function() {
  alert( $(".form-control").val());
  var selectedValue = $(".form-control").val();

  if ( selectedValue=='2017'){
    <% session[:year_browsing] = 2017 %>
  }
  else if ( selectedValue=='2016'){
    <% session[:year_browsing] = 2016 %>
  }
  else if ( $(".form-control").val()=='2015'){
    <% session[:year_browsing] = 2015 %>
  }
  else if ( $(".form-control").val()=='2014'){
    <% session[:year_browsing] = 2014 %>
  }
  else if ( $(".form-control").val()=='2013'){
    <% session[:year_browsing] = 2013 %>
  }
  else if ( $(".form-control").val()=='2012'){
    <% session[:year_browsing] = 2012 %>
  }
  else if ( $(".form-control").val()=='2011'){
    <% session[:year_browsing] = 2011 %>
  }
  else if ( $(".form-control").val()=='2010'){
    <% session[:year_browsing] = 2010 %>
  }
  else{
    <% session[:year_browsing] = 0 %>
  }
});

【问题讨论】:

  • 当你想改变会话变量时,你必须发送一个ajax方法,你不能更新视图上的会话
  • 我建议使用浏览器本地存储而不是会话存储来达到同样的效果。
  • @Sebin 谢谢我在下面发布了我的解决方案

标签: jquery ruby-on-rails session assign


【解决方案1】:

非常感谢 Sebin (https://stackoverflow.com/users/1684772/sebin)

我最终选择使用此代码将其存储在浏览器存储中

<script  type="text/javascript">
  jQuery(document).ready(function($) {
    var myVar = localStorage['myKey'] || '2016';
    $('.form-control option[value='+myVar+']').attr('selected','selected');
  });

  $( ".form-control" ).change(function() {
    alert( $(".form-control").val()) ;
    var selectedValue = $(".form-control").val();
    localStorage['myKey'] = selectedValue;
  });
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多