#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();
});
Надеюсь, это сработает для вас…….. Спасибо!