Php возвращает ссылку толстого ящика, которая не работает
Вопрос
У меня возникла небольшая проблема, когда я пытаюсь вернуть ссылку, чтобы открыть толстое окно на моей странице из простого эха php.В основном у меня есть:
Страница с некоторыми из них включает такие утверждения, как:
<?php
include ("display_header.php");
?>
Каждый из операторов включения просто указывает на php-файл, который извлекает короткий запрос и выводит ссылку с ссылкой на привязку, чтобы открыть встроенное толстое поле (с формой), когда пользователь нажимает на текст ссылки, например:
echo "<a href='#TB_inline?height=265&width=225&inlineId=header_change' class='thickbox' style='text-decoration:none; color:#990000'>";
echo "Query Result etc";
echo "</a>";
Поэтому, когда пользователь нажимает на ссылку на странице, должно всплывать толстое окно с формой.Пользователь вводит свои изменения в данный раздел, нажимает кнопку «Отправить», а jquery ajax публикует форму и перезагружает div с помощью инструкции include для отображения изменений.
Это работает при первой загрузке страницы, но как только я отправлю форму и попытаюсь снова нажать на возвращенную ссылку, ничего не произойдет.Кажется, это работает, если у меня есть ссылка, окружающая div с оператором включения внутри (что не так уж и сложно), но я просто не понимаю, почему это не работает, если у меня есть ссылка во включенном заявление php.
Может ли кто-нибудь предложить некоторые рекомендации?Я знаю, что здесь много замечательных людей, и, вероятно, я просто не понимаю чего-то очень простого.Спасибо!
Решение
Вам нужно привязать толстый ящик к вашим ссылкам, используя События/живые трансляции.Что-то вроде:
$("a.thickbox").live("click",function() {
tb_init('a.thickbox');
});
Это предотвратит потерю привязки ссылок с толстым ящиком к толстому ящику после их перезагрузки или внедрения через ajax.
Вы также можете сделать это в обратном вызове вашего метода $.ajax (или $.post или чего-то еще), например:
$.ajax({
type: "GET",
url: "/ajax-content.php",
cache: false,
data: "f=foo&b=bar",
loading: $('.loading').html(''),
success: function(html) {
$('#ajaxContent').html(html);
//re-attach thickbox
tb_init('a.thickbox, area.thickbox, input.thickbox');
}
});
Другие советы
Похоже, это проблема JavaScript, а не проблема PHP.
Мне кажется, что вы регистрируете событие при загрузке страницы, и после завершения события ajax вы не перерегистрируете событие.Однако я не могу знать этого, не видя javascript.