ruby-on-rails - Rails 6 + Turbolinks 不加载第 3 方库
问题描述
我正在使用 jQuery 库来屏蔽输入中的电话号码:
%script{src: "https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.3.4/jquery.inputmask.bundle.min.js", 'data-turbolinks-track': 'reload'}
这是在标签中。
然后,在我看来,代码如下所示:
<form...
<input id="phone_number" ... />
...
在所有的 HTML 之后,我有以下内容: :javascript $(document).on('page:load', function() { console.log("Hello World!"); $("#phone_number").inputmask ({"掩码": "(999) 999999"}); });
当我运行这段代码时,什么也没有发生,甚至没有Hello World!
打印出来。
如果我将 JS 部分更改为:
$(document).ready(function($){
console.log("Hello World!");
$("#phone_number").inputmask({"mask": "(999) 999999"});
});
然后Hello World!
打印出来并且输入屏蔽插件正在工作 - 太棒了!
但是,如果我单击应用程序中的某个链接,然后再次单击返回到具有 JS 屏蔽功能的页面,它会中断并返回以下错误消息:
Uncaught TypeError: $(...).inputmask is not a function
at HTMLDocument.<anonymous> (<anonymous>:13:32)
...
我该如何解决?
解决方案
将更改$(document).ready(function($)
为$(document).on('turbolinks:load', function($)
,因此它将是:
$(document).on('turbolinks:load', function($){
console.log("Hello World!");
$("#phone_number").inputmask({"mask": "(999) 999999"});
});
使用 Turbolinks 时,您需要监听每次页面访问时触发的 Turbolinks 事件,而不是监听 ready 事件。
参考:https ://guides.rubyonrails.org/working_with_javascript_in_rails.html#page-change-events和https://github.com/turbolinks/turbolinks/#observing-navigation-events
推荐阅读
- r - 儒略日期到带有小数的R中的日历日期
- excel - 提取Excel中特定符号之间的数字
- webrtc - CoTURN 使用统计
- ethereum - 以太坊区块链中源代码和业务信息的可见性
- php - Laravel Bootstrap 手风琴不能正常工作?
- sockets - 从 flask_socketio 导入 SocketIO 时没有名为“socketio”的模块,发出
- json - 在 Coldfusion 上使用 Trustpilot API 发起 Trustpilot 邀请
- java - 如何将数组中的值从最后一个值添加到第一个值
- google-bigquery - ST_GeogFromGeoJSON 在 bigquery 中失败,而在 postgres 中成功
- c++ - std::set::erase 意外擦除 3 个元素