Запуск JavaScript в Rails

Я думаю, это действительно просто, но я не могу заставить его работать. У меня есть скрипт в моем help.js в app/assets/javascript.

Это загружается, и если я добавляю alert(), он запускается, но когда я пытаюсь вызвать javascript (jquery click()), ничего не происходит. Если у меня есть javascript-код на странице, он работает, если внизу страницы.

Я предполагаю, что включения из ресурсов помещаются в начало страницы, и тогда мой сценарий не будет работать. Так...

  1. Я совершенно бесполезен в написании javascripts?
  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>

2 ответа

Решение

События в 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();
    });
  });
});

Я думаю, что ваш код правильный. Я проверил это на http://jsfiddle.net/Dd46n/ Я думаю, что help.js загружается перед файлом библиотеки jQuery.

Другие вопросы по тегам