2015-12-10 1 views
0

У меня есть запрос:шаблон Observer в браузере-JavaScript: подписаться на событие «Дом элемент добавлен» и обрабатывать этот элемент

$(function() { 
    $('form').each(function() { 
     // do smthing with form 
    }); 
}); 

Формы могут отображаться динамически, то есть построенный JavaScript. Мне нужно обрабатывать их сразу после нагрузки, как чему-л:

$('form').onload(function() { 
    // it's called after new form was added to dom 
}); 

Я думал об использовании setInterval, но, может быть, стандарты HTML5 и новый ES принесли новые ... чего-л

Помогают ли кто-нибудь сочинить от нагрузки обратного вызова с вышеупомянутыми характеристиками?

P.S. Чтобы прояснить цель: мне нужно привязать обработчик событий к событию «элемент был добавлен в dom».

+0

Почему бы не иметь несколько функций - тот, который создает формы, а другой обрабатывает формы после их добавления в DOM. Вызовите одну функцию за другой. – Andy

+0

Не могли бы вы показать нам свой HTML? –

+0

Потребовалось слишком много времени для рефакторинга кода существующего сайта ... Мне нужно smthing быстро и сложно :) – userlond

ответ

1

На самом деле произошло событие, которое является устаревшим теперь называется «DOMNodeInserted», было бы разумно использовать delegated events. с делегированными событиями вы можете обрабатывать события на новых элементах, которые динамически добавляют к DOM.

+0

Могу ли я спросить вас о каком-то фрагменте с DOMNodeInserted? – userlond

+1

Да, вы можете проверить это на этой скрипке, которую я сделал для u. Http://jsfiddle.net/vhdmsm/2yg5n7L9/ –

+0

Отлично, выглядит очень перспективным. И почему DOMNodeInserted устарел :)? – userlond

1

Заверните его в функции

$(function() { 
    function modForm() { 
    $('form').each(function() { 
     // do smthing with form 
    }); 
    } 
    modForm(); 
    $('a').click(function(){ 
    //add form dynamically 
    $('body').append('<form>'); 
    //call the function agan 
    modForm(); 
    }); 
}); 
+0

Решение конкретизировано и хорошо. Но могу ли я подписаться на событие 'некоторый элемент, добавленный в dom', и обработать этот элемент. – userlond

+0

Что вы подразумеваете под подпиской? – madalinivascu

+0

вы вызовете функцию при обновлении DOM, например: вы добавите новую форму '$ ('body'). Append ('

'); modForm();' и вызовите функцию после нее – madalinivascu