2014-01-15 5 views
-1

У меня есть динамически созданный из плагина javascript. Он создает некоторые divs с классом .someclass, который обертывает некоторые существующие div. Я хочу добавить класс к .someclass детям. Поэтому я положилПрисоединение события к динамически созданным элементам

$(document).ready('.icheckbox',function(){ 
      if($(this).children().first().hasClass('checked')){ 
       console.log('test'); 
      } 
     }) 

но консоль ничего не показывает. Поэтому я пробовал

$('body').on('.icheckbox',function(){ 
      if($(this).children().first().hasClass('checked')){ 
       console.log('test'); 
      } 
     }) 

, но он также не работает. Кто-то может помочь?

Edit: вот html код:

<div class="controls"> 
        <input type="checkbox" name="notif_user_like" id="notif_user_like" class="checkbox checked" value="1" /> <label for="notif_user_like" class="checkboxLabel">some text</label> 
       </div> 

и вот как код превращается после Javascript был обработан:

<div class="controls"> 
        <div class="icheckbox" style="position: relative;"><input type="checkbox" name="notif_user_like" id="notif_user_like" class="checkbox checked" value="1" style="position: absolute; opacity: 0;"><ins class="iCheck-helper" style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background-color: rgb(255, 255, 255); border: 0px; opacity: 0; background-position: initial initial; background-repeat: initial initial;"></ins></div> <label for="notif_user_like" class="checkboxLabel">some text</label> 
       </div> 
+1

Во-первых, нет тега 'document'. Вам повезло, что псевдо-готовое событие должно быть запущено ни на что, даже на пустой объект. Во-вторых, я думаю, что вы хотите: '$ ('body'). On ('change', '. Icheckbox', function() {...})' –

+0

Можете ли вы опубликовать структуру html? Также должно быть '$ (document) .ready' note удаление цитат вокруг документа – mituw16

+0

Синтаксис' on' - ['$ (delegate) .on (события, селектор, обратный вызов)'] (http: // api.jquery.com/on/). – moonwave99

ответ

2

Я думаю, что вы хотите:

$(document).ready(function() { 
    $('body').on('change', '.icheckbox', function (e) { 
     if ($(this).children().first().hasClass('checked')) { 
      console.log('test'); 
     } 
    }); 
}); 

Метод on используется для делегирования обработки событий, который это то, что вы хотите для динамически добавленных элементов, поскольку они могут отсутствовать, когда обработчик связан.

форма является $(parentElementSelector).on(event, triggerElementSelector, handler);

Вы можете прочитать API на http://api.jquery.com/on/

UPDATE:

Как отметил A. Wolff, вы на самом деле не нужно ждать, пока DOM будет загружен. Вы можете просто использовать document как селектор родительского элемента:

$(document).on('change', '.icheckbox', function (e) { 
    if ($(this).children().first().hasClass('checked')) { 
     console.log('test'); 
    } 
}); 

A [возможно] лучший метод (и тот, который я обычно реализуют в своих проектах) заключается в использовании более близкий предок в качестве селектора родительского элемента:

$(document).ready(function() { 
    $('.controls').on('change', '.icheckbox', function (e) { 
     if ($(this).children().first().hasClass('checked')) { 
      console.log('test'); 
     } 
    }); 
}); 
+0

Я просто публиковал, что +1 Op может делегировать документ без необходимости ждать готовности DOM или лучше использовать ближайший статический контейнер в качестве уровня делегата внутри документа, готового к обработке. OP должен читать DOC любым способом –

+0

Истинно, нет необходимости ждать DOM в готовность. Типично это по привычке. – pete

+0

Для привязки к телу y ou все равно придется ждать, пока BODY не окажется в DOM, поэтому не может помещать код в раздел HEAD, и поэтому ваш ответ точным.Я говорил о документе, который будет доступен во всех случаях –

Смежные вопросы