alexfedoseev
@alexfedoseev
React & Rails Dev

Как добавить новый объект в jquery-массив после ajax-вставки?

На странице rails-приложения есть форма с набором чек-боксов, которые работают как радио-кнопки. Скрипт выглядит так:
window.$covers_set = $('#building_views').find("input[id$='is_cover']")
$covers_set.click( ->
  $covers_set.not(this).removeAttr('checked')
)

Он отлично работает с элементами, которые были загружены на странице. Но на этой же странице есть форма, которая через ajax загружает файлы (gem jquery-fileupload-rails) и добавляет новые элементы формы, в которых также есть чек-боксы, которые нужно обрабатывать. Вопрос: как мне их добавить в массив $covers_set?

Я совсем зелёный в js и первое, что пришло на ум, это добавить js-скрипт через ajax вместе с новым элементом формы, который пушит в массив новый чекбокс:
# rails хелпер
= javascript_tag "$covers_set.add($('#тут_id_нового_чек-бокса'));"

Но я так понимаю его нужно инициализировать. Как это сделать?
Или я вобще не в том направлении думаю?
  • Вопрос задан
  • 3648 просмотров
Решения вопроса 1
itspers
@itspers
$('#building_views').on("click", "input[id$='is_cover']", function(){
  $covers_set.not(this).removeAttr('checked');
});


при условии, что #building_views аякс не трогает.
Если трогает - то парент повыше или сам document.

api.jquery.com/on
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Поддерживаю вариант @itspers.

Не знаю, как обстоят дела с on, но раньше использование live считалось не самой лучшей практикой. Альтернатива - обновлять $coversSet onSuccess ajax-а. Т.е. как-то так:
var $coversSet = $('#building_views').find("input[id$='is_cover']");

$.ajax({
    // url, data, type, etc
    success : function(result) {
         $coversSet = $('#building_views').find("input[id$='is_cover']");
    }
});


Если же это какой-то виджет и явного $.ajax() нет, надо подобрать соотв. хук.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы