JavaScript сквозь AJAX
Прислано: skayfar
сб, 22/10/2011 - 23:18
Создал несколько модулей, расширяющих функционал UI элементов Form API. Работают отлично, если рендерить формы без AJAX. Но с ним и в связке с Dialog API начинаются проблемы. Последний юзает jQuery.html для вставки HTML кода отрендереной формы в бокс диалога, что портит всю малину. Проблема в том, что theme* ф-ии моих кастомных элементов форм сразу после HTML кода пихают тег <script>...</script> с кодом инициализации (например, тот же jQuery(...).tabs(...)). Если кто пока не заметил, фишка в том что jQuery(...).html(...) не вставляет тэги скриптов в DOM дерево документов, а сначала вырезает их из общего HTML кода, выполняет посредством globalEval, и лишь затем клеит к DOM оставшийся HTML. Таким образом, скрипты инициализации элементов вызываются до того как они (элементы) были вставлены в документ.
P.S. Пока что решил проблему лишь частично и очень по-ламерски: засунул код инициализации в setTimeout чтобы он выполнялся через пол-секунды (здесь предполагается что за это время jQuery.html успеет выполнить все скрипты и прикрепить HMTL к документу). Но такой подход порождает визуальный артефакт - те пол секунды юзер имеет возможность лицезреть неформатированный кусок HTML кода и процесс его превращения в кастомные элементы форм (особенно неприятно дело обстоит со вкладками)...
- skayfar's blog
- Для комментирования войдите или зарегистрируйтесь
юзер имеет возможность лицезреть неформатированный кусок HTML кода
Ну в таких ситуация проверенная тактика - задать display:none; в CSS для элементов, которые потом выводятся средствами JS.
- Для комментирования войдите или зарегистрируйтесь
варианты:
1). метод success $.ajax
2). $.get.Script c колбэком
3). свой условие в обработчике
- Для комментирования войдите или зарегистрируйтесь



Комментарии