jquery - Ruby on Rails 6. 使用带有 Ajax 的 Bootstrap 4 工具提示
问题描述
我已经通过 Webpacker 设置了 Bootstrap 4、Jquery 和 Popper.js。
application.js文件(app/javascript/packs/application.js):
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
import "bootstrap"
document.addEventListener("turbolinks:load", () => {
$('[data-toggle="tooltip"]').tooltip()
$('[data-toggle="popover"]').popover()
})
environment.js文件(config/webpack/environment.js):
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.append('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
Popper: ['popper.js', 'default']
})
)
environment.config.set('resolve.alias', {jquery: 'jquery/src/jquery'});
module.exports = environment
使用该设置,我的工具提示可以正常工作,直到我开始使用 Ajax。使用 Ajax 更改页面后,工具提示停止工作。
我尝试将$('[data-toggle="tooltip"]').tooltip()
代码插入到我的js.erb文件中,但我总是在浏览器控制台中收到“工具提示不是函数”错误:
VM26:4 Uncaught TypeError: $(...).tooltip is not a function
at <anonymous>:4:30
at processResponse (rails-ujs.js:283)
at rails-ujs.js:196
at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.js:264)
(anonymous) @ VM26:4
processResponse @ rails-ujs.js:283
(anonymous) @ rails-ujs.js:196
xhr.onreadystatechange @ rails-ujs.js:264
使用工具提示的元素的页面视图的一部分:
...
<td class="pl-2">
<%= link_to @card, method: :delete, data: { confirm: "You sure?" },
remote: true do %>
<i class="fas fa-times" id="deleteIcon"
data-toggle="tooltip" title="Delete"></i>
<% end %>
</td>
...
我怎样才能让它工作?
解决方案
对于将来阅读本文的任何人,这就是我能够解决问题的方法。
我必须销毁(处置)所有引导工具提示并重新创建它们。你可以在你的 ajax 成功中调用它。在我的例子中,我使用刺激反射和变形页面,所以我在 finalizeReflex 回调中调用它。
$('[data-toggle="tooltip"]').tooltip('dispose');
$('[data-toggle="tooltip"]').tooltip();
显然是修复工具提示的一种骇人听闻的方法,但我只能做到这一点。
推荐阅读
- asp.net - 如何使用 ASP.Net 中的会话变量从母版页加载功能中删除 html 链接?
- c++ - 为什么没有调用复制构造函数?
- android - 快速 Android 网络 cookie 问题
- android - 无法在 Android Studio 中创建新活动(发生 IDE 错误)
- php - 为什么我在 Laravel 上得到未定义的变量
- postgresql - Traefik 和 PostgreSQL
- javascript - 类名的连续更改没有给出预期的输出
- asp.net - asp.net core - 将异常描述传递给客户端(例如 Angular)
- asp.net - Ajax 调用未将数组传递给控制器操作
- angular - 打开时Angular2 Ng日期时间选择器太大