#jquery #ajax #load #reload
#jquery #ajax #загрузка #перезагрузка
Вопрос:
У меня есть страница с пользовательским интерфейсом jQuery, которая работает нормально. На этой странице я изменяю содержимое некоторых контейнеров div с помощью jquery.load(), тоже работает нормально. Но если загружаемый мной контент использует jQuery UI сам по себе (для отображения аккордеона или диалогового окна в качестве примера), мне нужно снова загрузить файлы jQuery .js и файл css в контейнер div. Иначе это не сработает: (
Что я могу сделать, чтобы не загружать файлы снова И иметь рабочий ui-dialog, ui-accordion, ui-buttons, … в перезагруженном div?
Надеюсь, вы понимаете, что я хотел сказать 🙂
Ответ №1:
Пользовательский интерфейс jQuery основан на фреймворке jQuery. Вы не можете встроить пользовательский интерфейс jQuery в страницу, не имея самого jQuery.
Ответ №2:
например, когда вы используете кнопки пользовательского интерфейса jquery, вы инициализируете их с помощью определенного вызова следующим образом:
$( ".button" ).button({ parameters });
теперь, допустим, вы загружаете большую часть своей страницы через ajax load, jquery.load() или любым другим способом (насколько я знаю, вы могли бы вручную создавать новые узлы DOM «на лету» после определенных нажатий кнопок)
единственное, что вы должны сделать здесь, это обернуть свой фрагмент кода в функцию
function initializeButtons(container){
container = (typeof(container)==="undefined") ? $('body') : container;
$( '.button', container ).button({ parameters });
}
и везде, где у вас есть загрузка ajax, вы можете вызвать эту функцию в своем обратном вызове. вот так:
$('#mydiv').load("/mypath/mydata.html", function(){
// content is loaded, now init the buttons
initializeButtons($('#mydiv'));
});
теперь проделайте то же самое со всеми элементами пользовательского интерфейса jquery, которые вы используете, указателями даты, аккордеонами, кнопками или другими…
пожалуйста, имейте в виду, что это очень простая идея, для большей гибкости вы можете добавить другие функции, чтобы не инициализировать .button();
один и тот же элемент дважды, вы могли бы добавить для этого какой-то тест и многое другое, но это только основная идея.
Комментарии:
1. хорошая идея! Спасибо! это означает, что если я создам функцию initializeAll() и добавлю все элементы пользовательского интерфейса jquery, и буду вызывать ее каждый раз, когда использую .load(), мне не нужно будет снова загружать файлы jquery ?! 🙂 мне нравится!
2. технически это не совсем jquery, это базовый javascript, концепция функций, если вы с ней не знакомы, — это то, что вам действительно стоит изучить, поскольку это поможет вам сделать гораздо больше, чем то, что мы сделали здесь (что в основном просто повторное использование кода)