Как передать параметры обработчику событий? Когда я впервые познакомился с Javascript, я часто сталкивался с этой проблемой, поскольку у меня не было глубокого понимания замыканий.
Я часто сталкиваюсь с такого рода проблемами в дискуссионных группах, а именно:
Скопируйте код кода следующим образом:
<!DOCTYPE HTML>
<html>
<голова>
<мета-кодировка="utf-8">
<title>Как передать параметры обработчику событий? </title>
</голова>
<тело>
<a href="#" id="aa">Нажмите меня</a>
<тип сценария="текст/javascript">
вар E = {
on : function(el, type, fn){
el.addEventListener?
el.addEventListener(тип, fn, false):
el.attachEvent("on" + тип, fn);
},
un : function(el,type,fn){
el.removeEventListener?
el.removeEventListener(тип, fn, false):
el.detachEvent("on" + тип, fn);
}
};
var v1 = «Джек», v2 = «Лилия»;
обработчик функции(arg1,arg2){
предупреждение (arg1);
предупреждение (arg2);
}
// Как передать обработчику параметры v1 и v2?
//Объект события по умолчанию будет передан в качестве первого параметра обработчика.
//В это время первое, что всплывает при нажатии на ссылку, это объект события, а второе не определено.
E.on(document.getElementById('aa'),'click',handler);
</скрипт>
</тело>
</html>
Как передать обработчику параметры v1 и v2? Объект события по умолчанию будет передан в качестве первого параметра обработчика. При нажатии на ссылку первое, что появляется, — это объект события, а второй — неопределенный.
Вариант 1: объект события не сохраняется и передается в качестве первого параметра.
Скопируйте код кода следующим образом:
обработчик функции(arg1,arg2){
предупреждение (arg1);
предупреждение (arg2);
}
E.on(document.getElementById('aa'),'click',function(){
обработчик(arg1,arg2);
});
Вариант 2: сохраните объект события в качестве первого параметра.
Скопируйте код кода следующим образом:
обработчик функции(e,arg1,arg2){
предупреждение(е);
предупреждение (arg1);
предупреждение (arg2);
}
E.on(document.getElementById('aa'),'click',function(e){
обработчик(е, arg1, arg2);
});
Вариант 3. Добавьте getCallback в Function.prototype без сохранения объекта события.
Скопируйте код кода следующим образом:
Function.prototype.getCallback = function(){
вар _this = это, аргументы = аргументы;
возвращаемая функция(е) {
return _this.apply(это || окно, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));
Вариант 4. Добавьте getCallback в Function.prototype и сохраните объект события в качестве первого параметра.
Скопируйте код кода следующим образом:
Function.prototype.getCallback = function(){
вар _this = это, args = [];
for(var i=0,l=arguments.length;i<l;i++){
args[i+1] = аргументы[i];
}
возвращаемая функция(е) {
аргс[0] = е;
return _this.apply(это || окно, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));