Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   событие, которое срабатывает при изменении DOM структуры (https://javascript.ru/forum/events/9785-sobytie-kotoroe-srabatyvaet-pri-izmenenii-dom-struktury.html)

exec 07.06.2010 11:50

В таком случае можно добавить проверку на кол-во всех потомков элемента.

e1f 07.06.2010 12:02

exec, отлично :) Еще пример (взял с jqueri api, влом придумывать):
$("button").click(function() {
    $(this).replaceWith("<div>" + $(this).text() + "</div>");
});

exec 07.06.2010 12:26

Так тут вроде проверка на кол-во потомков сработает — jQuery сначала создаёт новый элемент, вставляет его после нужного узла и удаляет старый. Кол-во потомков должно меняться два раза.

UPD: Описанные выше действия происходят так быстро, что setInterval не успевает их засечь. Но, думаю, всё равно можно какой-нибудь костыль придумать.

e1f 07.06.2010 13:45

exec, DOM Mutation Event уже придумали за Вас :) А костыли -- они для инвалидов, в конце концов.

amigo* 09.06.2010 12:15

Воспользовался методом exec, за что ему спасибо. Ни .ajaxSuccess(), ни .ajaxError() не реагировали на get запрос, который шёл по умолчанию. Когда я подменил этот запрос своим (отправлял его первым), то срабатывал .ajaxError(), в теле ответа которого ничего не было, хотя в firebuge был виден ответ сервера + статус 200.

micscr 09.06.2010 15:44

Я еще тогда но не сильно вникая смотрел, что это не ajax запрос походу - так как на другой домен. Наверное - через <script> и innerHTML.
Если использовал метод exec то добавлял следующую строку ? :

var old = node.innerHTML;
setInterval(function () {
if (node.innerHTML != old) {
var old = node.innerHTML;
/* handler */
}
}, 100);

amigo* 09.06.2010 16:16

Вот так делал:

function resultset_link()
{
	var old = $('#resultset').eq(0).html();
	var inter=setInterval(function () 
    {
		if ($('#resultset').eq(0).html() != old) 
		{
			/*handler;*/
			clearInterval(inter); 
		}
	}, 100);
};


Там есть вызов такого типа: $.remoteScript('get', param1,{},param2).
Только вот синтаксис этой функции на jquery.com я не нашёл.

micscr 09.06.2010 16:22

ну так нормально - если засечь только как один раз вначале отработает. Так же надо было?

amigo* 09.06.2010 16:54

да. обработчик должен был отработать только один раз.
Есть ещё вопрос, который было бы интересно узнать... как в этих библиотеках используется JQuery, при этом не подгружая библиотеку на клиента?

micscr 09.06.2010 16:56

Ага, я уже посмотрел - ты в обработку нажатия кнопки вызов этой функции запихнул. Работает - и нормально.


Часовой пояс GMT +3, время: 14:28.