Такая проблема. На страничку выводится таблица с товаром и ссылочками «удалить», напротив каждой позиции. Каждой ссылке вешается событие onClick, с помощью которого табличка перезагружается, а соответственно и ссылки. После этого они теряют привязки onClick и повторно уже не срабатывают.
Крутил-вертел по-разному и смотрел много примеров. Но что-то никак не выходит.
Примерно таким образом пытаюсь заставить Drupal заново вешать события:
$("a.cart-drop-link:not(.processed)", context).addClass('processed').click(function() {
var mcart = function(data) {
$('#cart_page_table').html(data.output);
}
$.ajax({
type: 'POST',
url: this.href,
dataType: 'json',
success: mcart,
data: 'js=1'
});
return false;
});
}
Комментарии
Суть в том, что после получения через AJAX создаются новые объекты, а .click у вас навешан только на старые. Выхода два - либо принудительно привязывать событие после загрузки данных AJAX через bind(), либо пользоваться специальными плагинами (такими, как livequery).
попробуй так
var new_content = $('#cart_page_table').html(data.output);
Drupal.attachBehaviors(new_content);
}
Хм. Я полагал, что Drupal.behaviors и служит для повторного навешивания.
С bind'om пробовал вот так:
$("a.cart-drop-link", context).bind("click", function() {
...
});
}
Однако, выходят теже яйца.
2penexe, дай я тебя расцелую. Ты спас мой мозг
В итоге конструкция выглядит вот так:
$("a.cart-drop-link", context).click(function() {
var mcart = function(data) {
Drupal.attachBehaviors($('#cart_page_table').html(data.output));
}
$.ajax({
type: 'POST',
url: this.href,
dataType: 'json',
success: mcart,
data: 'js=1'
});
return false;
});
}
Drupal.behaviors только для задания. чтобы они навесились заново надо вызывать Drupal.attachBehaviors
$.ajax({
type: 'POST',
url: this.href,
dataType: 'json',
success: function(data) {
$('#cart_page_table').html(data.output);
$("a.cart-drop-link:not(.processed)", context).addClass('processed').click(delete_from_cart);
},
data: 'js=1'
});
return false;
}
Drupal.behaviors.cart = function (context) {
$("a.cart-drop-link:not(.processed)", context).addClass('processed').click(delete_from_cart);
}
а если так попробовать?
Опоздал, ну и через аттачбехавиорз правильнее будет...
Так не работает. Событие вешает, но после загрузки аяксом новой таблички, ссылки не реагируют.
Еще javascript выдает ошибку, что не знает, что такое context. Понятное дело, функция его не получает.
Если передать переменную, то перестает навешиваться даже в самом начале.