Получение «CSS

#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, концепция функций, если вы с ней не знакомы, — это то, что вам действительно стоит изучить, поскольку это поможет вам сделать гораздо больше, чем то, что мы сделали здесь (что в основном просто повторное использование кода)