【问题标题】:Rails jQuery not working in asset pipelineRails jQuery 在资产管道中不起作用
【发布时间】:2015-11-24 16:53:22
【问题描述】:

当我将此 jQuery 代码放在视图文件中时,它工作正常:

$('.messages-link').click(function (event) {
  $.getScript(this.href);
  history.pushState(null, "", this.href);
});

但是当我把它放在有用的.js中,并且在application.js中需要有用的.js时,它不起作用,它没有被调用。

application.js

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require bootstrap
//= require underscore
//= require useful

我知道有用.js 已成功包含在资产管道中,因为其中肯定有另一个函数是从同一个视图文件中调用的。

为什么jQuery函数不起作用?

【问题讨论】:

  • 也许该元素尚未出现在页面上...尝试将其包装在 $(document).ready(function() { ... }) 上可能会有所帮助

标签: jquery ruby-on-rails


【解决方案1】:

您是否忘记将代码放在 DOM 就绪函数中?在您尝试附加侦听器之前,您的 DOM 可能尚未加载?

$(function() {

  $('.messages-link').click(function (event) {
    $.getScript(this.href);
    history.pushState(null, "", this.href);
  });

});

【讨论】:

  • 我确实忘记了。谢谢你。我需要了解 DOM。
【解决方案2】:

这样做的原因是,如果您将其放在视图中,则元素 .messages-link 存在于 DOM 中。

如果你把它派上用场,那么文件会被捆绑在application.js 中,并在加载具有.messages-link 的视图之前加载到你的html 上的<HEAD></HEAD>

一种可能的解决方案是像这样更改绑定:

$('.messages-link').on('click', function (event) {
  $.getScript(this.href);
  history.pushState(null, "", this.href);
});

适用于动态添加的元素。

【讨论】:

  • 我试过这个(没有@riarcombe 的 DOM 准备功能),恐怕还是不行。 DOM ready 功能也需要吗?
  • 啊,我的错。应该是$(document).on('click', '.messages-link', function() {})。很高兴你让它正常工作。
猜你喜欢
  • 2014-05-14
  • 2023-04-08
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多