0
我有移除事件處理的滑動部件刪除eventhandlers不工作:「this」上下文在javascript中丟失?
如果我不使用代理服務器的處理程序中,「這個」將指向DOM元素
如何刪除處理程序有問題?
相關代碼
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
},
非常感謝你
謝謝,我想我明白了。它從來沒有發生在我身上。你能也可以嗎?爲什麼我不能訪問變量,例如我用var聲明瞭「events {..}」。 – Richard
'var'聲明局部變量,所以它只能在函數內訪問。要在JavaScript中聲明字段,您必須使用'this'。 (這是簡單的解釋,不是確切的解釋,更多信息請參見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript) – Mics
謝謝,我還無法測試,因爲我無法連接,但我會標記你的答案 – Richard