удалить экземпляр со всеми его перехватчиками
В зависимости от выбора в 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, время: 14:17. |