Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2013, 17:34
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

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

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

но при этом обрботчик-анонимная ф-ция удаляется. То есть ведь ф-ция, возращаемая методом proxy и метод test объекта obj это не одна и та же ф-ция, так почему же обработчик удалятся как-будто бы это одна и та же ф-ция?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2013, 18:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Тут используется небольшая хитрость. Функции назначается 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>
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2013, 18:41
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

Сообщение от danik.js Посмотреть сообщение
Тут используется небольшая хитрость. Функции назначается 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:45.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2013, 18:46
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм работы обработчика события salikoff Events/DOM/Window 1 20.09.2012 23:46
Получить значение из обработчика события mirek Общие вопросы Javascript 16 08.06.2012 23:16
Удаление события mousemove DesiresDesigner Events/DOM/Window 5 13.05.2012 21:08
Установка обработчика события dvikv jQuery 5 13.03.2012 19:51
Удаление обработчика события belkir Events/DOM/Window 8 22.09.2011 12:47