jquery - rails - jQuery 在加载时未定义,之后按预期工作
问题描述
我是 Rails 新手(在 ruby 2.5.3-p105 上使用 Rails 5.1.7),在我的登录页面上放置模板时遇到了一些问题。我正在使用bootstrap 4
和jQuery 3
。
(模板是这个https://startbootstrap.com/themes/agency/)
不知何故,似乎在加载所有其他脚本之后加载了 jQuery。
我之前尝试过jquery
加载bootstrap
但无济于事。也尝试在 turbo_links 上更改订单。
assets/javascripts/application.js
如下
//base
//= require jquery3
//= require jquery_ujs
//= require rails-ujs
//= require turbolinks
//
//template
//= require popper
//= require bootstrap
//
//vendors
//= require jquery-easing/jquery.easing
//
//assets
//= require template/agency
//= require template/contact_me
//= require template/jqBootstrapValidation
我需要在application.html.erb
for jQuery
and中添加 javascript_include_tagbootstrap
吗?还是只有宝石就足够了?这可能是原因吗?
我希望模板能像他独立工作一样工作。有人可以阐明一下吗?
太感谢了!
编辑:引发错误的行是
// Collapse Navbar
var navbarCollapse = function() {
if ($("#mainNav").offset().top > 100) {
$("#mainNav").addClass("navbar-shrink");
} else {
$("#mainNav").removeClass("navbar-shrink");
}
};
// Collapse now if page is not at top
navbarCollapse();
// Collapse the navbar when page is scrolled
$(window).scroll(navbarCollapse);
但这没关系,因为关键是 jQuery 没有加载
解决方案
您应该将执行该函数的代码包装在对 jqueryready
事件https://api.jquery.com/ready/的回调中。
另请注意,您也在使用 turbolinks,它有自己的页面加载 ( document.addEventListener('turbolinks:load', function(e){....})
) 事件,由 turbolinks 触发。
您可能需要嵌套两个回调以确保一切就绪。
就像是:
document.addEventListener('turbolinks:load', function(e) {
//code that should be run on each page load
$(document).on('ready', function() { // you can use the shortcut $(function() {
//code that should be run on each page load after jquery was initialized
}
})
推荐阅读
- django - 如何使用 Django Rest Framework 接受来自特定域的请求?
- python - Python视频到帧?
- java - 多级比较器
- c - 在 C 编程中使用 t1dsasm 分解类型 1 .pfa 字体文件格式
- php - laravel 集合中的某些对象与用户模型无关
- ruby - Sorbet 没有报告缺少的方法实现(与 RBI 签名相比),我在这里做错了吗?
- arrays - 我正在尝试从数组中转移到我在 Visual Basic 中的房间搜索系统的列表
- codenameone - 当 VKB 打开时保持工具栏可见
- php - 如何在 laravel 中对不同的表使用多个 JWT 身份验证
- reactjs - 如何在 Prod 中使用 Docker 和 nginx 运行 React?