【问题标题】:Running javascript in Rails在 Rails 中运行 JavaScript
【发布时间】:2017-02-26 19:24:11
【问题描述】:

我想这真的很简单,但我无法让它工作。我在 app/assets/javascript 的 help.js 中有一个脚本。

这是加载的,如果我添加一个 alert() 它会运行,但是当我尝试调用 javascript (jquery click()) 时没有任何反应。如果我在页面中有 javascript 代码,则它在页面底部有效。

我猜资产中的包含放在页面的开头,然后我的脚本将无法工作。所以...

  1. 我在编写 javascript 方面完全没有价值吗?
  2. 是否应该将 javascript 放在最后,如果从资产中要求它而不移动完整的 javascript_include_tag,该怎么做? (我想我可以将它从应用程序中排除并单独加载,但感觉不对)。
  3. 感觉很奇怪,这应该不起作用,所以我哪里出错了?

help.js

$('.clickme').click(function() {
  $('#working').show();
  var htmlStr = this.getAttribute('data-message');
  $('#helper_box').html(htmlStr);
  $('#helper_box').toggle('slow', function() {
    // Animation complete.
    $('#working').hide();
  });
});

index.html.erb

<div class="clickme" data-message="Something...">
  <%= image_tag("question_mark.png", :alt => "helper") %><br>
</div>

【问题讨论】:

  • 点击后firebug/js控制台上的任何错误?我猜你没有在 application.js 文件中包含 jquery 或者在 help.js 文件之后需要 jquery 库。粘贴 application.js 文件的内容
  • 朋友,你必须确保你的脚本必须在 DOM 准备好后执行。所以@Gonzalo Quero 是正确的。

标签: jquery ruby-on-rails placement


【解决方案1】:

应在文档完全加载后添加 jQuery 中的事件。您是否尝试过使用

$(document).ready(function() {
  $('.clickme').click(function() {
    $('#working').show();
    var htmlStr = this.getAttribute('data-message');
    $('#helper_box').html(htmlStr);
    $('#helper_box').toggle('slow', function() {
     // Animation complete.
     $('#working').hide();
    });
  });
});

【讨论】:

  • 甜蜜。那成功了。正如我认为的那样,这很容易,就像你现在的一切一样。谢谢贡萨洛。
  • 没问题。很高兴为您提供帮助!
【解决方案2】:

我认为您的代码是正确的。我在http://jsfiddle.net/Dd46n/ 查了一下,我猜 help.js 是在 jQuery 库文件之前加载的。

【讨论】:

  • 是的。这就是问题所在。感谢您的提醒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
相关资源
最近更新 更多