Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление обработчика события (https://javascript.ru/forum/misc/40896-udalenie-obrabotchika-sobytiya.html)

FanAizu 23.08.2013 17:34

Удаление обработчика события
 
Вот http://xhtml.co.il/ru/jQuery/jQuery.proxy есть описание метода proxy.
Этот метод возвращает новую анонимную ф-цию, которая назначае обработчику в этих строчка:
$("#test").click( jQuery.proxy( obj, "test" ) );

Не могу понять почему для удаления обработчика события click указывается совсем другая ф-ция из этих строчек:
$("#test").unbind("click", obj.test);

но при этом обрботчик-анонимная ф-ция удаляется. То есть ведь ф-ция, возращаемая методом proxy и метод test объекта obj это не одна и та же ф-ция, так почему же обработчик удалятся как-будто бы это одна и та же ф-ция?

danik.js 23.08.2013 18:20

Тут используется небольшая хитрость. Функции назначается GUID идентификатор, и прокси-функции тоже. Таким образом устанавливается соответствие между прокси и функцией. А при удалении обработчика проверяется этот GUID.

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var obj = {test: function() { alert('test') }};
var proxy = jQuery.proxy( obj, "test" );
alert([proxy.guid, obj.test.guid]);
</script>

FanAizu 23.08.2013 18:41

Цитата:

Сообщение от danik.js (Сообщение 268972)
Тут используется небольшая хитрость. Функции назначается GUID идентификатор, и прокси-функции тоже. Таким образом устанавливается соответствие между прокси и функцией. А при удалении обработчика проверяется этот GUID.

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var obj = {test: function() { alert('test') }};
var proxy = jQuery.proxy( obj, "test" );
alert([proxy.guid, obj.test.guid]);
</script>

То есть, если я правильно понял, то при передаче ф-ции, например, под названием test в ф-цию proxy, этой ф-цие test, jQuery присваивает идентификатор, этому идентификатору поставлена в соответсвие ссылка на ф-цию test. Вызывая же метод on('click', название ф-ции), jQuery проверяет наличие идентификатора у ф-ции и, затем находит ф-цию, поставленную в соответствие этому идентификатору и затем удаляет эту ф-цию из обработки события. Верно?

FanAizu 23.08.2013 18:46

В общем вроде понял. Спасибо.


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