0
나는 슬라이더 요소이벤트 핸들러가 작동하지 않음 : "this"컨텍스트가 자바 스크립트에서 손실 되었습니까?
내가 핸들러에 대한 프록시를 사용하지 않을 경우,이 "이"DOM 요소 I 핸들러를 제거하려면 어떻게
를 가리 킵니다의 eventhandlers 제거에 문제가 있나요?
관련 코드
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
},
당신에게 removeEventListener
에 전달 handler
와 같은 어떤 이벤트 리스너가 없기 때문에
감사합니다, 나는 그것을 얻을 생각합니다. 결코 저에게 두려워하지 않았습니다. 어쩌면 또한 전직 수 있습니까? 왜 var에 "events {..}"를 선언하면 변수에 액세스 할 수 없습니까? – Richard
'var'은 지역 변수를 선언하므로 함수 내에서만 접근 가능합니다. 자바 스크립트에서 필드를 선언하려면 'this'를 사용해야합니다. (이 단순화 된 설명이없는 한 정확한입니다. 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript 참조) – Mics
감사합니다, 나는 때문에, 아직 테스트 할 수 연결할 수 없지만 답을 표시하겠습니다. – Richard