2012-02-23 27 views
1

我想这很简单,但我无法让它工作。我在app/assets/javascript中的help.js中有一个脚本。如果我添加一个alert()它运行,但是当我尝试调用javascript(jquery click())时,什么都不会发生。如果我在页面中有JavaScript代码,它在页面底部工作。在Rails中运行javascript

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

  1. 我在写javascripts时完全没有价值吗?
  2. JavaScript应该放在最后,以及如何在不移动完整JavaScript_include_tag的情况下从资产中请求JavaScript? (我想我可以从应用程序中排除它并单独加载它,但感觉不对)。
  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> 
+0

单击后萤火虫/ js控制台上的任何错误?我想你没有在application.js文件中包含jquery,或者在help.js文件之后需要jquery库。粘贴application.js文件的内容 – 2012-02-23 11:47:25

+0

朋友你必须确保你的脚本必须在DOM准备就绪后执行。所以@Gonzalo Quero是正确的。 – 2012-02-23 12:42:46

回答

5

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(); 
    }); 
    }); 
}); 
+0

甜。那就是诀窍。正如我认为这很容易,因为几乎所有的事情都是在你现在的时候。谢谢贡萨洛。 – abegbg 2012-02-23 12:41:38

+0

没问题。很高兴帮助你! – 2012-02-23 12:45:44

5

我觉得你的代码是正确的。我检查了它在http://jsfiddle.net/Dd46n/我想在jQuery库文件之前加载help.js。

+0

Yupp。这是问题所在。感谢您的高举。 – abegbg 2012-02-23 12:42:51