在页面发布到服务器并返回错误后保留javascript更改

在页面发布到服务器并返回错误后保留javascript更改,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我有一个带有几个按钮的rails表单。当用户单击某个按钮时,我记得隐藏表单字段中的更改 将表单发布到服务器并重新加载后(如果表单中发生某些错误),隐藏字段将重置。我无法保留已单击的内容。 下面是试图保留已单击内容的代码 <div class="btn-group col-sm-12"> <button type="button" class="btn btn-default col-sm-6 active" id="user">I am user&

我有一个带有几个按钮的rails表单。当用户单击某个按钮时,我记得隐藏表单字段中的更改

将表单发布到服务器并重新加载后(如果表单中发生某些错误),隐藏字段将重置。我无法保留已单击的内容。 下面是试图保留已单击内容的代码

  <div class="btn-group col-sm-12">
          <button type="button" class="btn btn-default col-sm-6 active" id="user">I am user</button>
          <button type="button" class="btn btn-default col-sm-6" id="admin"> I am an admin</button>
  </div>  


<input id="profile_user" name="profile[user]" type="hidden" value="false" />
<input id="profile_admin" name="profile[admin]" type="hidden" value="false" />   



      function show_user(){

            $("#user").addClass("active");
            $("#admin").removeClass("active");    
            $("#profile_user").val("true");
            $("#profile_admin").val("false");

        }

        function show_admin(){
            $("#admin").addClass("active");
            $("#user").removeClass("active");
            $("#profile_user").val("false");
            $("#profile_admin").val("true");        
        }


    $(function(){
        console.log("reload");  
        console.log($("#profile_user").val());
            if($("#profile_admin").val() == "true"){
                show_admin();       
            }else{
                show_user();
           }
          $('#user').click(function() {
            show_user();
         });

         $('#admin').click(function() {
           show_admin();
         });
     });

我是用户
我是管理员
函数show_user(){
$(“#用户”).addClass(“活动”);
$(“#admin”).removeClass(“活动”);
$(“#profile_user”).val(“true”);
$(“#profile_admin”).val(“false”);
}
函数show_admin(){
$(“#admin”).addClass(“活动”);
$(“#用户”).removeClass(“活动”);
$(“#profile_user”).val(“false”);
$(“#profile_admin”).val(“true”);
}
$(函数(){
控制台日志(“重新加载”);
log($(“#profile_user”).val());
if($(“#profile_admin”).val()=“true”){
show_admin();
}否则{
show_user();
}
$('#user')。单击(函数(){
show_user();
});
$('#admin')。单击(函数(){
show_admin();
});
});

或者,有什么更好的方法可以通过服务器推送和返回将javascript更改保存在rails表单中?

您可以将其保存在localStorage中,并在文档开始时检查它是否已填充。以以下方式保存数据:

localStorage.setItem('myValue',myValue)
因此,在加载页面时,首先检查本地存储是否为空:

if (localStorage.length != 0){
   $('#yourField').val(localStorage.myValue);
}else{
    localStorage.setItem('myValue',myValue);
}

一般来说,您需要让控制器将这些值传递给您的视图,并让视图显示它们,但我无法确定这是否是问题所在。您可以发布控制器操作并查看吗?localStorage是一个rails变量或javascript变量?JS,我误解了吗?但javascript变量在往返服务器后不是已经重置并重新加载了吗?如果您将JS变量保存在localStorage中,它不会被完全重置。事实上,变量将被重置,但您可以从LocalStorageThank使用其保存的值!我不知道。这是一个html5的东西:)。它就像一个符咒!