Javascript не работает после j рендеринга представления

#javascript #jquery #ruby-on-rails #ruby-on-rails-3

#javascript #jquery #ruby-on-rails #ruby-on-rails-3

Вопрос:

Когда я динамически обновляю содержимое страницы с помощью удаленного вызова и файла * js.erb, подобного этому:

add_content.js.erb

 $("#new_content").html('<%= j render("content") %>');
  

Для рендеринга представления, подобного этому:
_content.html.erb

 <div class="name">
    <%= @content.name %>
</div>
<div class="text">
    <%= @content.text %>
</div>
  

С помощью файла javasript, подобного этому:
application.js

 $( document ).ready(function() {
    ...
    $(".name").on('click', function(){
      $(".text").slideToggle();
    });
    ...
})
  

… javascript slideToggle() не выполняется. Когда я делаю

 <%= render("content") %> 
  

в любом представлении (без js.erb) все работает так, как ожидалось, и slideToggle() работает.
Это всего лишь краткий пример, чтобы упростить его, он не связан со slideToggle, даже с alert («…») и т. Д. не будет работать.

Итак, мой вопрос в том, почему javascript не выполняется? Связано ли это с каким-либо порядком загрузки? Нужно ли мне что-то повторно инициализировать?

Ответ №1:

Вы пробовали это

 $( document ).ready(function() {
    //your code here;
})
  

Комментарии:

1. Да, так это уже выглядит. Благодаря вашему ответу я обновил свой вопрос.

Ответ №2:

Если на страницу вводится новый HTML, выберите элементы и прикрепите обработчики событий после того, как новый HTML будет помещен на страницу. Или используйте делегированные события для подключения обработчика событий, для получения более подробной информации, пожалуйста, обратитесь к документации по api, http://api.jquery.com/on /

В вашем application.js попробуй вот так ….

 $('#new_content').on('click', '.name', function() {
  $(".text").slideToggle();
});
  

Надеюсь, это сработает для вас…….. Спасибо!