Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Можно ли вызывать действие при уничтожении узла? (https://javascript.ru/forum/misc/12354-mozhno-li-vyzyvat-dejjstvie-pri-unichtozhenii-uzla.html)

балерун 13.10.2010 17:48

Можно ли вызывать действие при уничтожении узла?
 
Привет, можно привязывать события на разные действия: click, blur, change и т.д., а можно привязать функцию, которая будет вызываться при уничтожении узла?

exec 13.10.2010 18:04

(function ($) {
	var _ = $.fn.remove;
	$.fn.remove = function ( expr ) {
		this.trigger( "remove" );
		return _.call( this, expr );
	});
})(jQuery);


$(element).bind( "remove", handler );

балерун 13.10.2010 18:45

(function($) {
    var _ = $.fn.remove;
    $.fn.remove = function ( expr ) {
        alert();
        this.trigger( "remove" );
        return _.call( this, expr );
    };
})(jQuery);

$(document).ready(function() {
    $('#deleteMe').bind('remove', function(){alert('AAA')})
    $('#deletor').click(function(){$('#container').empty()});
});


И html:
<div id="container">
    <p id="deleteMe">text</p>
</div>
<button id="deletor">Удалить</button>


JQuery подключен. Что я не так делаю?

exec 13.10.2010 19:03

remove() надо вызывать, а не empty().

балерун 14.10.2010 10:11

(function($) {
    var _ = $.fn.remove;
    $.fn.remove = function ( expr ) {
        this.trigger( 'remove' );
        alert('alert #1');
        return _.call( this, expr );
        alert('alert #3');
    };
})(jQuery);
 
$(document).ready(function() {
    $('#deleteMe').bind('remove', function(){alert('alert #2')})
    $('#deletor').click(function(){$('#container').remove()});
});


Вызывается только первый алерт, и нет никаких ошибок.

p.s. вау, этим постом меня повысили до аспиранта)

exec 14.10.2010 13:24

В своём коде я случайно поставил лишнюю скобку, из-за этого и не работало. Сейчас всё ОК:

<html>
	<head>
		<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js">
		</script>
	</head>
	<body>
		<div id='foo'>
			Lorem ipsum
		</div>
		<a href='javascript://' onclick='$("#foo").remove();'>
			Удалить!
		</a>
		<script type="text/javascript">
			(function ($) {
				var _ = $.fn.remove;
				$.fn.remove = function ( expr ) {
					this.trigger( "remove" );
					return _.call( this, expr );
				};
			})(jQuery);
			$( "#foo" ).bind("remove", function () {
				alert( "Remove!" );
			});
		</script>
	</body>
</html>

балерун 14.10.2010 14:29

Ты просто Бог! Спасибо огромное, от меня жирный плюс)
Дело было не в скобке. Я заметил ее, еще и подумал, что это защита от дурака, т.е. тупого копирования.
Вся суть была в расположении скрипта, он у меня срабатывал, когда еще документ не был полностью загружен.. да, вот так опростоволосился)


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