Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax Возврат и вывод данныз html 
:(
    Опции темы
nepster
Дата 13.3.2013, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



итак, имею вот такую структуру. в head подключаем штук 5 скриптов (jquery, плагины, собственные функции).

далее есть страница, на которой материал и поиск (поиск на аякс).

Код

<div class="widget"  id="TableContent">
       // материал
</div>



Окей, поиск работает следующим образом:
Код

        /************************************************************************/
        // AJAX ПОИСК
       jQuery("input[name=AjaxSearchData]").keyup( function(e) 
        {
            if(e.which === 13)
            {
                var SearchData = jQuery("input[name=AjaxSearchData]").val();
                var csrfToken  = jQuery("input[name=AjaxSearchData]").attr("csrfToken");
     
                window.history.replaceState('object or string', 'Title', '/cpanel/reporting/activation/{search:'+SearchData+';page:1}');

                if(SearchData.trim().length > 1)
                {
                    // данные для передачи
                    var data = 
                    {
                        "YII_CSRF_TOKEN": csrfToken,
                        "SearchData":     SearchData,
                        "action":         'matrixActivation'
                    };
                    
                    // id для загрузки 
                    var doom_id_load  = '.loader';
                    // id для отображения ошибки
                    var doom_id_error = '';
                    
                    var request = jQuery.ajax({
                        url: "/cpanel/search/AjaxSearchData/",
                        type: "POST",
                        data: data,
                        dataType: "HTML",
                        
                        // ЗАГРУЗКА
                        beforeSend: function() { AJAXload(doom_id_load, true) },
                        
                        // ОБРАБОТКА AJAX ОШИБОК
                        error:  function(xhr, str){ AJAXerror(xhr, str, doom_id_error);  AJAXload(doom_id_load, false) },
                        
                        // ЗАПРОС ПРОШЕЛ
                        success: function(data)
                        {
                            AJAXload(doom_id_load, false)
                            
                            jQuery("#TableContent").outerHTML(data);
                            
                        }
                    });
                }
            }
        });
    });


по нажатию ентер, вы отправляем данные и нам возвращается результат в формате text/html, который якобы обратно подставляется в блок с айди TableContent

Все работает все хорошо.  НО 

Я заметил такой прикол. Я использую плагин для вида форм (красивые инпутики, все дела), дальше поиск вывидете и вызываю собственную функцию на 1 из кнопок в материалах, через onclick.  После того, как подгрузились данные и вставились, не работает поиск (ентер игнор), не работает плагин форм, работает только моя функция по onclick. 

Подскажите пожалуйста, почему так вышло?

Добавлено @ 02:41
Код

 success: function(data)
                        {
                            AJAXload(doom_id_load, false)
                            
                            jQuery("#TableContent").outerHTML(data);
                            
                            jQuery.getScript("/template/cpanel/function.js");
                        }


хотя если дописать вот такой код, заработает поиск, вероятнее всего если подгрузить еще раз плагин, то все заработает. 

Вопрос почему так ? По сути никакие элементы не меняются !

Это сообщение отредактировал(а) Aliance - 13.3.2013, 09:58
PM MAIL   Вверх
Sanchezzz
Дата 13.3.2013, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: нет
Всего: 60



Все верно на все красивые инпутики которые были сделаны через JS нужно вызвать повторно для них код.
Так как новые элементы не получили события или указания что сними сделать.






--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
nepster
Дата 13.3.2013, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



а можно ли как-то обновить события не вызываю при этом долнотильно скрипт по новой ? 

В вк к примеру, по дэбагеру не видно, что они что то вызывают дополнительно к примеру, когда прокручиваем скрон и подгружается контент 
PM MAIL   Вверх
Aliance
Дата 13.3.2013, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Можно если написать грамотно сам скрипт. Видимо у вас скрипт состоит из 2 вещей - самого кода и его инициализации. Сам код достаточно загрузить однажды. А инициализация уже вызывать отдельно столько раз, сколько нужно.
С другой стороны, если инициализация поставлена как объект observer - то и этого не понадобится. В общем думайте в сторону исправления логики работы скрипта.
PM MAIL WWW ICQ Skype   Вверх
nepster
Дата 13.3.2013, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Если отойти от jquery обработчика событий 
Код

.keyup( function(e) 
{
...
}


и сделать просто:


Код

onkeyup="AjaxSearch(event)"



все работает (не считаем  виды для инпутов )

подскажите пожалуйста, как можно инициализировать события по новой ? 
У меня кроме как вынести события в отдельный файл и подгрузить по новой идей нет. 


Цитата

С другой стороны, если инициализация поставлена как объект observer - то и этого не понадобится. 

Вы имеете ввиду, если бы все было написенно на ооп , то все было бы хорошо ? 
PM MAIL   Вверх
Aliance
Дата 13.3.2013, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Какая стоит версия jQuery? Если старая - значит нужно обновляться. Если новая - значит нужно читать changelist и не пользоваться deprecated методами, оставленными лишь для обратной совместимости. Раньше были bind/live, видимо это то что вам нужно (.keyup() == .bind('keyup') ==> live('keyup')), а теперь нужно писать $(document).on('keyup', $element)
PM MAIL WWW ICQ Skype   Вверх
nepster
Дата 14.3.2013, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



У меня еть получается файл, грубо говоря загрузчиК, где идет вызов всех плагинов и тп. 

Код

jQuery(function() {

****
     
    //===== Sortable columns =====//
    
    jQuery("table").tablesorter();

****
});


К примеру вот, у меня не работает сортировка в таблицу, но если я этот файл подгруду после выполения скрипта, все заработает, так же 
если я после выполнения допишу строчку jQuery("table").tablesorter();, все заработает. 

Вопрос можно, ли сделать так, что бы это происходило автоматом , без без повторных вызовов ? 
PM MAIL   Вверх
Aliance
Дата 14.3.2013, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Нет, это логично что инициализируя плагин через jQuery("table").tablesorter(); он применяется только к тем элементам, которые есть на странице. При подгрузке новых нужно его повторно инициализировать. НО, только его, а не все плагины.
PM MAIL WWW ICQ Skype   Вверх
nepster
Дата 14.3.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



да, но к примеру в этом файле инициализация всех плагинов. 

К примеру у меня в таблице, данные которой я обновляю есть следующие плагины:
 - подсказки 
 - сортировка в таблице 
 - инпутики 
 - модальные окна 

но к примеру если я засуну в функцию повторный вызов скрипта с подгрузкой инициализации плагинов, что бы потом не путаться. 
Тоесть в 1 функции не вызывать 5 таких плагинов, в друго1 еще 5 других и тп. 
Файл весит кб 40(без сжатия), думаю не страшно если его вот так тянуть каждый раз ?
PM MAIL   Вверх
Aliance
Дата 15.3.2013, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Если честно, то я уже запутался и немного потерял нить задачи, но могу сказать в целом что это может и не критично в этом случае, но в целом неправильно. Нужно делать по-другому)
PM MAIL WWW ICQ Skype   Вверх
nepster
Дата 15.3.2013, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Суть задачи максимально эффективно решить вопрос с переинициализацией плагинов после подгрузки нового контента средствами аякс. 

А есть еще варианты, кроме в функции запускать плагины повторно ? 
PM MAIL   Вверх
Aliance
Дата 15.3.2013, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Если это готовый плагин - то мне видится, что самый оптимальный вариант переинициализировать их (но только их, а не все заного).
Если это самописный плагин - нужно смотреть как он написан.
PM MAIL WWW ICQ Skype   Вверх
nepster
Дата 15.3.2013, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



нет вроде это jQuery UI.

Я понял суть, большое спасибо!  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.