Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.01.2014, 20:34
Интересующийся
Отправить личное сообщение для gradus Посмотреть профиль Найти все сообщения от gradus
 
Регистрация: 18.02.2011
Сообщений: 24

удалить экземпляр со всеми его перехватчиками
В зависимости от выбора в 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, так что бы все его методы и события удалились, не перебирая их ручками ?
Ответить с цитированием
  #2 (permalink)  
Старый 28.01.2014, 20:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

gradus,
назначить обработчики с помощью on что и так всегда делается в jquery даже если вы не пишите on и off когда нужно отключить.
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2014, 22:29
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<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>

Последний раз редактировалось Vlasenko Fedor, 29.01.2014 в 00:04.
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2014, 06:42
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Нет, проблема вот в чем:

Сообщение от gradus
создаются разные экземпляры класса.
насколько разные, какого класса, куда девается разница и в таком роде.

Меняйте систему.
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2014, 18:03
Интересующийся
Отправить личное сообщение для gradus Посмотреть профиль Найти все сообщения от gradus
 
Регистрация: 18.02.2011
Сообщений: 24

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пасибо за ответ по делу!
Ответить с цитированием
  #6 (permalink)  
Старый 29.01.2014, 23:42
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от gradus
В функциях разные обработчики
где ты увидел в примерах одинаковые обработчики
self.__destruct че за порнографию написал
где метод __destruct вызывается в js нет деструктора
читать здесь http://javascript.ru/blog/gordon-fre...pt-Kak-dobavit
http://javascript.ru/tutorial/events...-nuzhnogo-tipa

Последний раз редактировалось Vlasenko Fedor, 30.01.2014 в 01:48.
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2014, 20:02
Интересующийся
Отправить личное сообщение для gradus Посмотреть профиль Найти все сообщения от gradus
 
Регистрация: 18.02.2011
Сообщений: 24

Poznakomlus, прошу прощения, я имел ввиду обработчики на разные элементы.
К примеру в version1 мы вешаем событие на $('#name'), а в version2 нам навешивать событие на этот элемент не нужно (в примере кода я это не указал).
Сообщение от Poznakomlus Посмотреть сообщение
self.__destruct че за порнографию написал
где метод __destruct вызывается в js нет деструктора
Вы истинный программист, который не читает комментарии кода
// my_exc_func.__destruct();

И к чему эти ссылки ? чем алгоритм описанный в статье отличается от моего последнего примера ?)
Ответить с цитированием
  #8 (permalink)  
Старый 02.02.2014, 00:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Походу behaviour корячится.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить элемент input с сохранением его значения в <td> Сергей1980 jQuery 1 29.08.2013 02:06
удалить подключенный плагин, а затем включить его FedyaLutkovski Элементы интерфейса 6 20.03.2013 11:37
Удалить вершину дерева, оставив его детей. Dima Events/DOM/Window 12 28.09.2009 12:03