Rails: Как заставить функцию Jquery действовать на недавно добавленную частичку? - PullRequest
1 голос
/ 06 ноября 2011

Я работаю над системой оценки звезд ajax. Для звезд я использовал ярлык радиокнопок. Когда страница загружается, если элемент имеет оценку (то есть 3), он будет проверять переключатель 3 и все метки, прежде чем он будет окрашен (наведение мыши также изменяет изображение). Этот код запускается, когда $ (document) .ready и находится в /public/javascript/rating_ballot_index.js

Моя проблема в том, что, поскольку рейтинг находится на странице индекса (так что несколько форм) после отправки формы (нажав на ярлык), мне нужно перезагрузить форму. Я делаю это из файла 'create.js.erb' (после нажатия на элемент добавляется класс 'clicky', чтобы узнать, какую форму удалить).

('.clicky').closest("tr").replaceWith("<%= escape_javascript(render :partial => @product, :locals => {:product_class => "clear_rating"}) %>");

После вставки нового частичного кода код из rating_ballot_index.js не отвечает на этот новый добавленный частичный (поскольку документ уже был загружен). Если я попытаюсь запустить функцию снова, в следующий раз, когда я отправлю рейтинг, он отправит его дважды. Есть ли способ, которым я могу остановить запуск функции в первый раз, затем перезапустить ее или заставить исходную функцию распознавать недавно добавленную частичку?

Надеюсь, то, что я написал, имеет смысл! Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 декабря 2012

Решено: Проблема была в том, что при вызове .replaceWith он заменял его идентичным частичным, поэтому jQuery не осознавал, что это новый элементВ итоге я заменил его на .empty (), а затем .append ()

0 голосов
/ 07 ноября 2011

Поскольку при написании вашей функции js вы так полагаетесь на dom, который был загружен.

Чтобы он был в курсе изменений, вы должны использовать live или лучше: delegate.

Вот небольшая статья, объясняющая различия.

...