javascript - Jquery 在控制台中有效,但在 Rails 4 application.js 文件中无效

标签 javascript jquery ruby-on-rails ruby coffeescript

这是我的 html 标记:(在 welcome/index.html.erb 中)在 Rails 4 项目中。

<div class="bottom-bottom-box box">
<div class="miv-box">
  <span class="five-yr thin-text">5-year</span></br>
  <span class="avg-return thin-text">Average Return</span>
</div>
  <span class="percent bold-text">19%+</span>
</div>

这是我的 jquery:(在 welcome.js 中)(我不知道 coffeescript,所以我只是将预制文件重命名为 .js 而不是 .js.coffee)

$(".bottom-bottom-box").on('click', function() {
  alert('test');
  var el = $(this);
  if (el.text() == el.data("text-swap")) {
   el.text(el.data("text-original"));
  } else {
   el.data("text-original", el.text());
   el.text(el.data("text-swap"));
 }
});

我执行警报('test')的点击功能甚至都不会工作,奇怪的是当我在控制台中输入完全相同的行时它会工作。

$(".bottom-bottom-box").on('click', function() { alert('test') });

不确定可能出了什么问题,但如果有人遇到过这个问题,请告诉我! 谢谢

最佳答案

听起来像 .on().bottom-bottom-box 元素加载到 DOM 之前被调用。

这是一种常见的情况,其中包含在 head 中的 Javascript 在 body 加载之前运行。事件处理程序只能附加到 DOM 中存在的元素,这就是为什么您的代码在页面加载(DOM 为空)时失败,但在控制台(加载 DOM)中有效。

您可以通过将您的 JS 包含移动到页面底部 来解决此问题,或者告诉 jQuery 在加载 DOM 之后运行您的代码,如下所示:

$(document).ready(function() {
  $(".bottom-bottom-box").on('click', function() {
    alert('test');
    var el = $(this);
    if (el.text() == el.data("text-swap")) {
      el.text(el.data("text-original"));
    } else {
      el.data("text-original", el.text());
      el.text(el.data("text-swap"));
    }
  });
});

如果您使用 Turbolinks,请查看此答案:https://stackoverflow.com/a/18770589/1153362

关于javascript - Jquery 在控制台中有效,但在 Rails 4 application.js 文件中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268605/

相关文章:

javascript - 计算pinboard风格博客的容器高度(基于绝对元素)

ruby-on-rails - Rails 3 迁移 : Adding reference column?

javascript - 用于检测 ".com.com"的电子邮件验证的正则表达式

Javascript substr( ) 不一致

php - 如何在目录中创建文件分页?

jquery - 如何通过将下拉 div 放置在相关控件的上方或下方来在屏幕上显示?

javascript - 在 jquery 事件中引用 javascript 对象

javascript - IE11 是否移除了 javascript 条件编译?

ruby-on-rails - Ruby on Rails 将通配符子域路由到 Controller /操作

ruby-on-rails - 延迟作业 - 未定义的方法 `name' 用于 nil :NilClass