2014-11-26 2 views
-1

Я пытаюсь применить событие live click для динамически добавленного элемента к редактируемому iframe.применение живых jquery-событий к содержимому iframe

$('#iframeView').contents().find('*').on("click", function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    selectItemElement($(this)); 
}); 

Это работает, что он применяет события к элементам в IFRAME, но если я добавить новые элементы в IFRAME они больше не получить на событие щелчка. Таким образом, он не применяет живые события.

любая идея, как заставить это работать?

+0

'$ ('# iframeView') содержание() найти ('тело') на ("щелчок", '*', функция (е) {...});' Для... hover, делегировать события mouseenter mouseleave –

+0

событие hover, которое я знаю, как это сделать. Прямо сейчас я не могу понять, почему событие click не применяется к новым динамическим элементам, которые я добавляю к iframe. –

+0

@RichardTorcato Потому что вы не делегируете событие click –

ответ

1

Вам необходимо делегировать ваши события, что означает добавление событий в статический контейнер. IFrame document создаст хороший статический контейнер, который поможет вам получить .contents().

Если целевой элемент события соответствует вашему второму параметру (.on() s), функция будет вызываться.

$('#iframeView').contents().on("click", '*', function (e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    selectItemElement($(this)); 
}); 

JSFiddle

+0

круто спасибо. Теперь работает. –

+0

@RichardTorcato Рад помочь. – George

1

Из documentation вы можете использовать:

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

Для например, :

$('#iframeView').contents().on("click",'*',function (e) { 
//Your code here 
}); 
Смежные вопросы