Javascript 使用bootsrap的rails应用程序中的不同jQuery/JS错误

Javascript 使用bootsrap的rails应用程序中的不同jQuery/JS错误,javascript,jquery,ruby-on-rails,ajax,bootstrap-sass,Javascript,Jquery,Ruby On Rails,Ajax,Bootstrap Sass,我有一个过滤器可以过滤我的表单。当我打开它时,我的日期选择器不工作,即使相同的代码在应用程序的另一个页面上工作。我没有在其他页面上看到错误 Uncaught TypeError: $(...).datepicker is not a function 在我得到的每一页上 DEPRECATED: This filename doesn't follow the convention, use bootstrap-datepicker.en-CA.js instead. $.fn.datepick

我有一个过滤器可以过滤我的表单。当我打开它时,我的日期选择器不工作,即使相同的代码在应用程序的另一个页面上工作。我没有在其他页面上看到错误

Uncaught TypeError: $(...).datepicker is not a function
在我得到的每一页上

DEPRECATED: This filename doesn't follow the convention, use bootstrap-datepicker.en-CA.js instead.
$.fn.datepicker.deprecated @ core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012
(anonymous) @ bootstrap-datepicker-en-CA.self-fb416403a677f41efad9cfc05939c9fe3eeb04627845d85da10d9eee99ba96b2.js?body=1:21
(anonymous) @ bootstrap-datepicker-en-CA.self-fb416403a677f41efad9cfc05939c9fe3eeb04627845d85da10d9eee99ba96b2.js?body=1:23
core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012 DEPRECATED: The language code "kh" is deprecated and will be removed in 2.0. For Khmer support use "km" instead.
$.fn.datepicker.deprecated @ core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012
(anonymous) @ bootstrap-datepicker.kh.self-6562a5a87f529e9a3121f8b49f20a6f7d3651340738f7d747a2418d721d01eae.js?body=1:21
(anonymous) @ bootstrap-datepicker.kh.self-6562a5a87f529e9a3121f8b49f20a6f7d3651340738f7d747a2418d721d01eae.js?body=1:22
core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012 DEPRECATED: The language code "kr" is deprecated and will be removed in 2.0. For korean support use "ko" instead.
$.fn.datepicker.deprecated @ core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012
(anonymous) @ bootstrap-datepicker.kr.self-ca28b775db5a32ebbee6667b0bc40e26e078ce363db5c55c9a904155d3b9fdb5.js?body=1:19
(anonymous) @ bootstrap-datepicker.kr.self-ca28b775db5a32ebbee6667b0bc40e26e078ce363db5c55c9a904155d3b9fdb5.js?body=1:20
core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012 DEPRECATED: This language code "rs-latin" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian latin support use "sr-latin" instead.
$.fn.datepicker.deprecated @ core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012
(anonymous) @ bootstrap-datepicker.rs-latin.self-a3302a16cb7cc00b6d455f26ed8a73f8890da7280ee9507c2cd9fe9f36ec6352.js?body=1:20
(anonymous) @ bootstrap-datepicker.rs-latin.self-a3302a16cb7cc00b6d455f26ed8a73f8890da7280ee9507c2cd9fe9f36ec6352.js?body=1:21
core.self-c808be6e04274a80c551034d8f8a677b7c3995aec044ea4e6edf9cbbc19ff750.js?body=1:2012 DEPRECATED: This language code "rs" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian support use "sr" instead.

Uncaught TypeError: $(...).popover is not a function
at HTMLDocument.<anonymous> (bootstrap.self-fdc98dee79ee88255e10cac6caa91338165cb76cf0d263744d8d90011fc2ef8f.js?body=1:3)
at fire (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:3233)
at Object.fireWith [as resolveWith] (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:3363)
at Function.ready (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:3583)
at HTMLDocument.completed (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:3618)
只导入一次,即使订单也应该可以

html.erb


'提交按钮'%>


$(文档).ready(函数(){ $('.lineshow').hide(); $('.realform').hide(); $(“#任何东西_shift”).change(函数(){ if($('#任何东西_shift选项:选中')。text!=“”){ $('.lineshow').show(); } }); $(“#任何行”)。更改(函数(){ 如果($('#任何内容_行选项:选中')。文本!=“”){ $('.realform').show(); } }); $(“提交”)。单击(功能(e){ e、 预防默认值(); $.ajax({ 类型:“POST”, url:“/trainings/add_worker_tm”, 数据:{ id:$(this.val(), 访问令牌:$(“访问令牌”).val() }, 成功:功能(结果){ $('.realform').show(); } }) }) }); $('micropost_picture').bind('change',function(){ var size_in_兆字节=this.files[0].size/1024/1024; 如果(大小(单位:兆字节>5){ 警报('最大文件大小为5MB。请选择较小的文件'); } }); $('[data Behavior~=datepicker]')。datepicker({ “格式”:“dd.mm.yyyy”, “weekStart”:1, “自动关闭”:正确 });
ajax调用没有很好地工作,但我还没有投入太多时间。我不喜欢那里的第一行,但是没有jQuery似乎不起作用,但是为什么?我想我在application.js中包含了jQuery

控制器.erb

def add_worker_tm
    if !params.has_key?(:anything)
      puts "emoty"
    @worker = Worker.new
    @workers = Worker.order("#{sort_column} #{sort_direction}")
    @workerall = Worker.all
    @trainings = Training.all
    @trainingall = Training.all
    else
      @shift = params[:anything].require(:shift)
      @line = params[:anything].require(:line)
      @worker = Worker.new
      @workersshifts = Worker.all.where("shift_id= ?", @shift)
      puts @workersshifts
      @workers = []
      @workersshifts.each do |w|
        puts w.line_ids
          if w.line_ids.include? @line
            @workers << w
        end
      end
      @workerall = Worker.all
      @trainings = Training.all.where(where_lines: @line)
      @trainingall = Training.all.where(where_lines: @line)
    end
    end

  def add_worker_tm
if !params.has_key?(:anything)
  puts "empty"
@worker = Worker.new
@workers = Worker.order("#{sort_column} #{sort_direction}")
@workerall = Worker.all
@trainings = Training.all
@trainingall = Training.all
else
  @shift = params[:anything].require(:shift)
  @line = params[:anything].require(:line)
  @worker = Worker.new
  @workersshifts = Worker.where(shift_id: @shift)
  @workers = []
  @workersshifts.each do |w|
      if !w.line_ids.include?(@line)
        @workers << w
    end
  end
  @workerall = Worker.all
  @trainings = Training.all.where(where_lines: @line)
  @trainingall = Training.all.where(where_lines: @line)
end
end
def add_worker_tm
如果!参数是否有_键?(:任何内容)
把“emoty”
@worker=worker.new
@workers=Worker.order(“#{sort_column}{sort_direction}”)
@workerall=Worker.all
@培训=培训
@trainingall=Training.all
其他的
@shift=参数[:任何内容]。要求(:shift)
@line=params[:anything].require(:行)
@worker=worker.new
@workersshift=Worker.all.where(“shift\u id=?”,@shift)
工人倒班
@工人=[]
@工人轮班,每班|
放置w.line\u id
如果w.line_id.包括@线

@工人们经过几个小时的反复尝试,我找到了一些解决办法

我发现涡轮链接是邪恶的,不会触发我所有的事件。发现后,我删除了
,并将脚本更改为

<script type="text/javascript">
      document.addEventListener("turbolinks:load", function () {
          $('.lineshow').hide();
          $('.realform').hide();

一切看起来都正常。Cookie是一种肮脏的解决方案,可以立即显示对筛选器的不同请求

尝试从视图中删除
。好的,我没有发现日期选择器的错误,尽管它不工作,并且我的隐藏部分都显示出来了……如果不需要,您可以从gem文件中删除turbolinks gem。无论如何,我建议阅读github上的Turbolinks文档,因为它实际上很容易使用。我宁愿保留它。删除一个加速我的页面的功能并不是一个很好的解决方案。我不熟悉rails、js/jQuery和ajax,所以我在这方面遇到了麻烦,但我学到了足够的东西,没有删除TurboLink。谢谢你的建议,我会看的。你知道一个比cookies更好的方法,我可以在页面上显示每个新的过滤请求吗?如果我不使用我的cookie,realform将在第一次隐藏,第二次显示。。。
def add_worker_tm
    if !params.has_key?(:anything)
      puts "emoty"
    @worker = Worker.new
    @workers = Worker.order("#{sort_column} #{sort_direction}")
    @workerall = Worker.all
    @trainings = Training.all
    @trainingall = Training.all
    else
      @shift = params[:anything].require(:shift)
      @line = params[:anything].require(:line)
      @worker = Worker.new
      @workersshifts = Worker.all.where("shift_id= ?", @shift)
      puts @workersshifts
      @workers = []
      @workersshifts.each do |w|
        puts w.line_ids
          if w.line_ids.include? @line
            @workers << w
        end
      end
      @workerall = Worker.all
      @trainings = Training.all.where(where_lines: @line)
      @trainingall = Training.all.where(where_lines: @line)
    end
    end

  def add_worker_tm
if !params.has_key?(:anything)
  puts "empty"
@worker = Worker.new
@workers = Worker.order("#{sort_column} #{sort_direction}")
@workerall = Worker.all
@trainings = Training.all
@trainingall = Training.all
else
  @shift = params[:anything].require(:shift)
  @line = params[:anything].require(:line)
  @worker = Worker.new
  @workersshifts = Worker.where(shift_id: @shift)
  @workers = []
  @workersshifts.each do |w|
      if !w.line_ids.include?(@line)
        @workers << w
    end
  end
  @workerall = Worker.all
  @trainings = Training.all.where(where_lines: @line)
  @trainingall = Training.all.where(where_lines: @line)
end
end
<script type="text/javascript">
      document.addEventListener("turbolinks:load", function () {
          $('.lineshow').hide();
          $('.realform').hide();
    <div>
  <%= form_for :anything, :html=>{:id=>"filter", :multipart => true,:remote=>true}, url: add_worker_tm_trainings_path do |f| %>
    <%= f.label :schicht %>
    <%= f.collection_select :shift, Shift.all, :id, :name, include_blank: :true %>
    <div class="lineshow">
      <%= f.label :linie %>
      <%= f.collection_select :line, Line.all, :id, :name, include_blank: :true %>
      <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
      <%= f.submit "filter", {:class => "bttn-and-txt", :id => "filter", :name => "filter", :value => "filter"} %>
  <% end %>
  </div>
  <div class="realform">
    <%= simple_form_for(Trainingsmembership.new, url: add_worker_tm_trainings_path) do |f| %>
      <div style="overflow: auto; height: 350px">
        <table>
          <tr>
            <th style="width: 25px"></th>
            <th style="width: 200px"><%= sort_link "name" %></th>
            <th style="width: 125px"><%= sort_link "position" %></th>
            <th style="width: 75px"><%= sort_link "Schicht" %></th>
            <th style="width: 100px"><%= sort_link "linie" %></th>
          </tr>
          <% @workers.each do |worker| %>
            <tr>
              <td><%= check_box_tag "worker_ids[worker_ids][]", worker.id %></td>
              <td><%= worker.name %></td>
              <td><%= Position.find(worker.position_id).name %></td>
              <td><%= Shift.find(worker.shift_id).name %></td>
              <td>
                <% worker.line_ids.each do |line| %>
                  <%= Line.find(line).name %>
                <% end %></td>
            </tr>
          <% end %>
        </table>
      </div>
      <div style="overflow: auto; height: 350px">
        <table>
          <tr>
            <th style="width: 25px"></th>
            <th style="width: 200px"><%= sort_link "Training" %></th>
            <th style="width: 100px"><%= sort_link "linie" %></th>
          </tr>
          <% @trainingall.each do |training| %>
            <tr>
              <td><%= check_box_tag "training_ids[training_ids][]", training.id %></td>
              <td><%= training.name %></td>
              <td><%= Line.find(training.where_lines).name %></td>
            </tr>
          <% end %>
        </table>
      </div>
      <br><br>
      <%= f.input :duration, label: 'Gültigkeit:' %>
      <%= f.input :date, :as => :string, :input_html => { data: {behaviour: "datepicker"}}, label: 'Prüfungstermin:' %>
      <%= f.input :comment, as: :text, label: 'Bemerkung:' %>
      <%= f.input :attachement, as: :file, label: 'PDF-Protokoll:' %>
      <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
      <%= f.submit "Mitarbeiter hinzufügen", {:class => "btn btn-primary", :name => "submit", :value => "submit"} %>
    <% end %>
  </div>
  <script type="text/javascript">
      $('[data-behaviour~=datepicker]').datepicker({
          "format": "dd.mm.yyyy",
          "weekStart": 1,
          "autoclose": true
      });
  </script>
  <script type="text/javascript">
      function GetCookie(name) {
          var arg=name+"=";
          var alen=arg.length;
          var clen=document.cookie.length;
          var i=0;

          while (i<clen) {
              var j=i+alen;
              if (document.cookie.substring(i,j)==arg)
                  return "here";
              i=document.cookie.indexOf(" ",i)+1;
              if (i==0)
                  break;
          }

          return null;
      };
      document.addEventListener("turbolinks:load", function () {
          $('.lineshow').hide();
          //$('.realform').hide();

              var visit=GetCookie("COOKIE1");

              if (visit==null){
                  $('.realform').hide();
              }
              var expire=new Date();
              expire=new Date(expire.getTime()+(5*60*1000));
              document.cookie="COOKIE1=here; expires="+expire;

          $('#anything_shift').change(function () {
              if ($('#anything_shift option:selected').text != "") {
                  $('.lineshow').show();
              }
          });
          $('#anything_line').change(function () {
              if ($('#anything_line option:selected').text != "") {
                  $("#filter").click();
              }
          });

      });
  </script>
  <script type="text/javascript">
      $('#micropost_picture').bind('change', function () {
          var size_in_megabytes = this.files[0].size / 1024 / 1024;
          if (size_in_megabytes > 5) {
              alert('Maximum file size is 5MB. Please choose a smaller file.');
          }
      });
  </script>
</div>
respond_to do |format|
      format.js { render 'trainings/add_worker_tm'}
      format.html
    end