РЕДАКТИРОВАТЬ : Проблема не связана с Boxy, я столкнулся с той же проблемой, когда использовал метод загрузки JQuery.
EDIT 2 : Когда я вынимаю link.remove()
изнутри обратного вызова ajax и помещаю его перед загрузкой ajax, проблема больше не возникает. Существуют ли ограничения для управления элементами внутри функции обратного вызова ajax.
Я использую JQuery с плагином Boxy.
При щелчке ссылки «Флаг» на странице появляется модальное окно Boxy, которое загружает форму через ajax. Когда пользователь отправляет форму, ссылка (тег <a>
) удаляется, и из ответа ajax создается новая. Этот механизм работает, ну, в 3 раза! После 3-го, функция обратного вызова просто не удаляет / заменяет / добавляет (проверял несколько вариантов манипулирования) элемента.
Единственный совет, который я имею, заключается в том, что после 3-го вызова родительский элемент ссылки становится недоступным для выбора. Однако я ничего не могу сделать из этого.
Извините, если это очень тривиальная проблема, у меня нет опыта программирования на стороне клиента.
Соответствующий HTML ниже:
<div class="flag-link">
<img class="flag-img" style="width: 16px; visibility: hidden;" src="/static/images/flag.png" alt=""/>
<a class="unflagged" href="/i/flag/showform/9/1/?next=/users/1/ozgurisil">Flag</a>
</div>
Вот соответствующий код js:
$(document).ready(function() {
$('div.flag-link a.unflagged').live('click', function(e){
doFlag(e);
return false;
});
...
});
function doFlag(e) {
var link = $(e.target);
var url = link.attr('href');
Boxy.load(url, {title:'Inappropriate Content', unloadOnHide:true, cache:false, behaviours: function(r) {
$("#flag-form").live("submit", function(){
var post_url = $("#flag-form").attr('action');
boxy = Boxy.get(this);
boxy.hideAndUnload();
$.post(post_url, $("#flag-form").serialize(), function(data){
par = link.parent();
par.append(data);
alert (par.attr('class')); //BECOMES UNDEFINED AT THE 3RD CALL!!
par.children('img.flag-img').css('visibility', 'visible');
link.remove();
});
return false;
});
}});
}