Rails jquery.tagsinput.js 在 link 之后未执行

Rails jquery.tagsinput.js not executing after link

问题

我有来自文件 jquery.tagsinput 的自定义效果,单击 link 后它不起作用,而如果我 刷新页面。

经过测试的解决方案

我尝试了以下方法:

  1. 禁用 turbolinks
  2. 正在为 ready 或 onload js 函数搜索文件 - none 存在

描述

文件jquery.tagsinput具有以下结构

(function($) {
   // Different functions and javascript staff
 })(jQuery);

该函数包括我需要执行的不同 javascript 函数,如果我刷新浏览器,它们就会起作用。例如。

$.fn.tagsInput = function(options) { 
   // Some code
 },options);

如果我刷新浏览器,我可以看到相关的 html 输入字段有两个事件处理程序:

  1. jquery.tagsinput

        $(data.holder).bind('click',data,function(event) {
            $(event.data.fake_input).focus();
        });
    
  2. jquery.js

    if ( !( eventHandle = elemData.handle ) ) { 
    // Some Code    
    };
    
  3. 我的edit.html.erb查看

    <%= f.text_field :skill_list, :class => "tagsinput form-control", :id => "tagsinput", value: f.object.skill_list.map { |t| t}.join(', ') %>
    

生成以下 html 代码:

非常感谢

法布里齐奥·贝尔托利奥

这是我的 application.js,它包括以下文件:

//= require jquery.tagsinput
//= require form-component
//= require scripts

Jquery.tagsinput 没有就绪函数,但是 script.js 函数有,当我编辑 script.js 就绪函数时问题就开始了。

script.js 具有以下代码:

function initializeJS() {
     // Some js code
}
jQuery(document).ready(function(){
    initializeJS();
});

问题可能是由于我对 script.js 就绪函数进行了编辑以与 turbolinks gem 兼容(而不是使用 .save我会用 .on('turbolinks:load'..)

jQuery(document).on('turbolinks:load', function(){
    initializeJS();
});

一旦我更正了那行,问题就解决了,但我不明白它被解决的真正原因。我没有禁用 turbolinks。以后我会尝试了解真正的原因,并post做出解释。