удалить экземпляр со всеми его перехватчиками
В зависимости от выбора в select, создаются разные экземпляры класса.
В каждом классе есть свои обработчики. К примеру: function version1(){ $('#name').click(function(){ alert('version1'); }); rename_user=function(){ alert('version 1 (rename_user)'); } } function version2(){ $('#name').click(function(){ alert('version2'); }); rename_user=function(){ alert('version 2 (rename_user)'); } } $('#sel').change(function(){ var class_name=$(this).val(); new class_name(); // может и не сработает, но это я для примера }); Проблема в том что если сначала вызвать version1, а потом version2, то события в version1 все равно срабатывают. Как можно удалить version1, так что бы все его методы и события удалились, не перебирая их ручками ? |
gradus,
назначить обработчики с помощью on что и так всегда делается в jquery даже если вы не пишите on и off когда нужно отключить. |
<body> <select size="3" id="sel"> <option disabled>Выберите героя</option> <option value="1">Чебурашка</option> <option selected value="2">Крокодил Гена</option> <option value="3">Шапокляк</option> </select> <input id="test" type="button" value="Test"/> <script> function version1() { alert('version1'); test.onclick = func1; } function version2() { alert('version2'); test.onclick = func2; } function version3() { alert('version3'); test.onclick = func3; } sel.onchange = function () { window['version' + this.value](); } function func1(){alert('func1')} function func2(){alert('func2')} function func3(){alert('func3')} </script> </body> |
Нет, проблема вот в чем:
Цитата:
Меняйте систему. |
Poznakomlus, это не вариант. В функциях разные обработчики, почти на разных элементах.
В общем все же сделал ручками :( function version1(){ var self=this; var myEventName='version1'; self.docList=function(){ }; $('#name').bind('click.'+myEventName,self.docList); self.__destruct=function(){ $('#name').unbind('click.'+myEventName,self.docList); }; } my_exc_func= new version1(); // my_exc_func.__destruct(); // delete my_exc_func; kostyanet, cпасибо за ответ по делу! |
Цитата:
self.__destruct че за порнографию написал где метод __destruct вызывается в js нет деструктора читать здесь http://javascript.ru/blog/gordon-fre...pt-Kak-dobavit http://javascript.ru/tutorial/events...-nuzhnogo-tipa |
Poznakomlus, прошу прощения, я имел ввиду обработчики на разные элементы.
К примеру в version1 мы вешаем событие на $('#name'), а в version2 нам навешивать событие на этот элемент не нужно (в примере кода я это не указал). Цитата:
// my_exc_func.__destruct(); И к чему эти ссылки ? чем алгоритм описанный в статье отличается от моего последнего примера ?) |
Походу behaviour корячится.
|
Часовой пояс GMT +3, время: 00:15. |