Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2016, 15:22
Аспирант
Отправить личное сообщение для razorg1991 Посмотреть профиль Найти все сообщения от razorg1991
 
Регистрация: 10.11.2012
Сообщений: 98

Не могу разобраться с делегированием
Пытаюсь заставить работать плагин iCheck на контент подгруженный через AJAX (вначале загружается вся страница и сразу же document ready идет второй запрос через AJAX).

Есть такое

<div id="ajax_result"></div>


Гружу в него такое (много чекбоксов)

<input type="checkbox" class="minimal" value="on" checked=""  />
...
<input type="checkbox" class="minimal" value="on" checked=""  />


Если контент загружается сразу (есть в DOM), то проблем подключить плагин не составляет (естественно jquery присутствует, подключаем плагин и инициализируем его) - так все работает.
<script src="plugins/iCheck/icheck.min.js"></script>
    <script>
        //iCheck for checkbox and radio inputs
        $('input[type="checkbox"].minimal').iCheck({
          checkboxClass: 'icheckbox_minimal-blue',
          radioClass: 'iradio_minimal-blue'
        });
    </script>


На AJAX контенте, пока не получается. Накодил такого
$('#ajax_result').on('ajax_result', 'input[type="checkbox"].minimal', iCheck({
          checkboxClass: 'icheckbox_minimal-blue',
          radioClass: 'iradio_minimal-blue'
        })
);
$('#ajax_result').triggerHandler('ajax_result');

и подключил
<script src="plugins/iCheck/icheck.min.js"></script>
    <script src="client/search/init_icheck.js"></script>


Т.е. сделал свое событие ajax_result

В консоли ошибка "ReferenceError: iCheck is not defined"
Подозреваю, что чето не правильно сделал.
Помогите пжлст.
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2016, 18:39
Аватар для Gurylyov
Новичок на форуме
Отправить личное сообщение для Gurylyov Посмотреть профиль Найти все сообщения от Gurylyov
 
Регистрация: 11.11.2011
Сообщений: 9

Думаю, дело в том, что ты вызвал iCheck как обычную функцию, а это jQuery функция, которая должна вызываться на DOM-элементе.
т.е. должно быть по идее что-то вроде этого
$('#ajax_result').on('ajax_result', 'input[type="checkbox"].minimal', function() {
    $(this).iCheck({
        checkboxClass: 'icheckbox_minimal-blue',
        radioClass: 'iradio_minimal-blue'
    });
);


ещё как вариант, можно следить за появлением новых инпутов
$(document).on('change','input[type="checkbox"].minimal', function(){
    $(this).iCheck({
        checkboxClass: 'icheckbox_minimal-blue',
        radioClass: 'iradio_minimal-blue'
    });
});

Последний раз редактировалось Gurylyov, 17.01.2016 в 18:46.
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2016, 20:50
Аспирант
Отправить личное сообщение для razorg1991 Посмотреть профиль Найти все сообщения от razorg1991
 
Регистрация: 10.11.2012
Сообщений: 98

Сообщение от Gurylyov
Думаю, дело в том, что ты вызвал iCheck как обычную функцию, а это jQuery функция, которая должна вызываться на DOM-элементе.
Сам думал в эту сторону, направление верное.
Короче чтобы не тянуть кота за я... Решил проблему, может кому пригодиться.
В скрипт ajax (конкретно я запихнул следующий код в success после выполнения всей функции по success), запихиваем следующее

// создаем событие успешного request
$('#ajax_result').trigger('requestsuccess');


Т.е. тупо вручную создаем событие.
А дальше в самом скрипте инициализации плагина, ловим это событие

$('#ajax_result').bind('requestsuccess', function() {

    $('input[type="checkbox"].minimal').iCheck({
          checkboxClass: 'icheckbox_minimal-blue'
        });        
});


Это решение справедливо для любого плагина или просто самописного скрипта
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2016, 21:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

razorg1991,
зачем тригер то, если можно сразу
success:  function() {

    $('input[type="checkbox"].minimal').iCheck({
          checkboxClass: 'icheckbox_minimal-blue'
        });
}
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2016, 23:14
Аспирант
Отправить личное сообщение для razorg1991 Посмотреть профиль Найти все сообщения от razorg1991
 
Регистрация: 10.11.2012
Сообщений: 98

Сообщение от рони
зачем тригер то, если можно сразу
Ну можно и так. Я просто люблю разносить все по разным местам
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться kktak Элементы интерфейса 1 15.06.2015 08:44
Не могу разобраться с file watchers в WebStorm kobezzza Оффтопик 4 16.03.2013 17:27
Не могу разобраться с навигацией по DOM Iktash Элементы интерфейса 2 24.02.2013 10:29
Не могу разобраться с двумерным массивом pro_xaoc jQuery 6 10.06.2012 12:11
Не могу разобраться с setTimeout bazilio2010 Общие вопросы Javascript 3 14.01.2012 00:17