LINUX.ORG.RU

[jquery][ajax] Умирает обработчик событий.


0

1

По клику на элементе span срабатывает js-событие.

<div id="1" class="rating_block">
  <span id="1" class="big_star"></span>
  <span id="2" class="big_star"></span>
  <span id="3" class="big_star"></span>
  <span id="4" class="big_star"></span>
  <span id="5" class="big_star"></span>
  <span id="6" class="big_star"></span>
  <span id="7" class="big_star"></span>
  <span id="8" class="small_star"></span>
  <span id="9" class="small_star"></span>
  <span id="10" class="small_star"></span>
</div>

Затем блок успешно (структура дерева остаётся верной) переписывается функцией .html(«содержимое ajax-ответа»).

$(".rating_block").filter("#1:first").html('<span class=\"big_star\" id=\"1\"><\/span><span class=\"big_star\" id=\"2\"><\/span><span class=\"big_star\" id=\"3\"><\/span><span class=\"big_star\" id=\"4\"><\/span><span class=\"big_star\" id=\"5\"><\/span><span class=\"big_star\" id=\"6\"><\/span><span class=\"big_star\" id=\"7\"><\/span><span class=\"big_star\" id=\"8\"><\/span><span class=\"small_star\" id=\"9\"><\/span><span class=\"small_star\" id=\"10\"><\/span>');

После чего любые клики по span'ам перестают обрабатываться. Вот обработчик событий.

$(document).ready(function() {
  $(".rating_block *").click(function() {
    alert("Boo!");
    $.post("/reports/update", { trip_id: $(this).parent().attr("id"), rating: $(this).attr("id") }, null, "script");
    return false;
  });
});

Использую Rails 3.1, jQuery 1.6.2.


Ответ на: комментарий от daris

Кстати, роуты лучше не прибивать гвоздями в вьюшках и на клиент-сайде в целом. Потом если поменяешь ссылку, то накроешься медным тазом везде заменять все.

Я про:

$.post("/reports/update"

SteveBallmer ()
Ответ на: комментарий от SteveBallmer

Sed - инструмент смелых!

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

В этом проекте около 30 моделей, но пока объёмы не пугают - переписать ссылки будет несложно.

daris ()
Ответ на: комментарий от SteveBallmer

> Кстати, роуты лучше не прибивать гвоздями ... на клиент-сайде в целом.

Предлагаешь генерить application.js из шаблона?

INFOMAN ★★★★★ ()
Ответ на: комментарий от INFOMAN

Есть решение лучше? Я думал, думал над этим и только к такому выводу и пришел (генерить отдельный JS или вставлять прямо в шаблон отрезки <script> с переменными).

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

SteveBallmer ()
Ответ на: комментарий от SteveBallmer

Кстати, как вариант — вообще не писать роутов в js. Событие же вызывается по клику на ссылке? Вот и пишем <%= link_for ", {:controller: :reports, :action: :update}, :class => 'big_star', :remote => true %>, а обработчик вешаем на ajax:success

INFOMAN ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.