Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery-select2和rails表单验证错误问题_Javascript_Jquery_Ruby On Rails_Jquery Select2_Select2 Rails - Fatal编程技术网

Javascript jquery-select2和rails表单验证错误问题

Javascript jquery-select2和rails表单验证错误问题,javascript,jquery,ruby-on-rails,jquery-select2,select2-rails,Javascript,Jquery,Ruby On Rails,Jquery Select2,Select2 Rails,我在rails表单上使用jQuery插件在多选字段上执行自动完成。如果页面上没有验证错误,一切正常。如果存在与此元素无关的验证错误,则javascript部分将获得一个空元素,并在JSON.parse调用中失败 但是,使用chrome工具进行检查表明,表单数据在“服务”下具有正确的信息 services:[{"id":93,"text":"Old School"},{"id":94,"text":"Gels"}],93,94 下面是视图片段 <%= f.label :services,

我在rails表单上使用jQuery插件在多选字段上执行自动完成。如果页面上没有验证错误,一切正常。如果存在与此元素无关的验证错误,则javascript部分将获得一个空元素,并在JSON.parse调用中失败

但是,使用chrome工具进行检查表明,表单数据在“服务”下具有正确的信息

services:[{"id":93,"text":"Old School"},{"id":94,"text":"Gels"}],93,94
下面是视图片段

<%= f.label :services, "Services" %>
              <input name="services" type='hidden' id='services' data-values='<%= @services %>' value='<%= @selected_services %>' style="width: 100%"/>
}


我也有同样的问题,在验证错误之后,select2输入字段无法加载数据

我不确定它是否对您的案例有帮助,但它可以帮助其他堆栈用户在验证后处理select2错误

在我的例子中,错误来自控制器。我使用了一个before_操作过滤器来获取变量,以准备select2输入字段的选项或数据

我意识到我的过滤器中缺少了一些操作,因此不再生成变量

class MyController < ApplicationController
  before_action :prepare_data, only: [:edit, :update, :new, :create] #now I had all my actions not only edit and new for instance.

  private 

  def prepare_data
   @my_var_for_data_select2 = User.all.collect.collect{|u| u.username}
  end
end
$(function() {
  $("#services").select2({
    initSelection: initSel,
    createSearchChoice: function(term, data) {
      if ( $(data).filter(function() {
        return this.text.localeCompare(term)===0;
      }).length===0) {return {id:term, text:term};}
    },
    multiple: true,
    data: function (){
      var data = $('#services').data('values');
      return {results:data};
    }
  });
});
class MyController < ApplicationController
  before_action :prepare_data, only: [:edit, :update, :new, :create] #now I had all my actions not only edit and new for instance.

  private 

  def prepare_data
   @my_var_for_data_select2 = User.all.collect.collect{|u| u.username}
  end
end