2012-02-23 30 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