У меня есть проблема с удалением eventhandlers для ползунка элементаудаление обработчиков событий не работает: «этот» контекст потерян в javascript?
Если я не использую прокси-сервер для обработчика, то «это» будет указывать на йот элемент
Как удалить обработчик?
соответствующий код
var slider = (function (slider) {
var Sliderhandle = function(handle){
EvtTarget.call(this);
this.events = {
start: ['touchstart', 'mousedown'],
move: ['touchmove', 'mousemove'],
end: ['touchend', 'touchcancel', 'mouseup']
};
this.options = {};
this.element = $$('div.ui-slider');
// set context for event handlers
this.start = this.start.bind(this);
this.move = this.move.bind(this);
this.end = this.end.bind(this);
this.proxy = function(func){
var that = this;
return(function(){
return func.apply(that,arguments);
});
}
Object.defineProperty(this, "__el",{
value:handle
});
};
Sliderhandle.prototype = Object.create(EvtTarget.prototype,{
init : {
value:function(config){
this.container = $$('div.ui-slider');
this.track = this.container.getElementsByClassName('ui-slider-track')[0];
this.value = (config && config.value) || 1;
this.min = (config && config.min) || 1;
this.max = (config && config.value) || 1000;
this.change = (config && config.change) || null; // callback
this.addEvents("start");
this.setValue(this.value);
},
enumerable:true
},
addEvents : {
value:function(name){
var list = this.events[name],
handler = this[name],
all;
handler = this.proxy(handler);
for (all in list){
this.container.addEventListener(list[all], handler, false);
}
},
enumerable:true
},
removeEvents:{
value:function(name){
var list = this.events[name],
handler = this[name],
all;
//handler = this.proxy(handler);
for (all in list){
this.container.removeEventListener(list[all], handler, false);
}
},
enumerable:true
},
спасибо
Спасибо, я думаю, что я понимаю. Это никогда не было для меня. Можете ли вы, возможно, и экс. lain почему я не могу получить доступ к переменным, если я, например, объявляю «события {..}» с var. – Richard
'var' объявляет локальную переменную, поэтому она доступна только внутри функции. Чтобы объявить поле в JavaScript, вы должны использовать 'this'. (Это упрощенное объяснение, а не точное. Для получения дополнительной информации см. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript) – Mics
спасибо, я еще не смог проверить, потому что Я не мог подключиться, но я помету ваш ответ – Richard