Ответ 1
handleEvent.call(this, e);
Я использую jQuery, и у меня есть функция, которая выполняет функцию обратного вызова события, и поэтому в этой функции "this" отображается объект, который захватил событие. Тем не менее, есть экземпляр, где я хочу явно вызывать функцию из другой функции - как установить, что "this" будет равно внутри функции в этом случае?
Например:
function handleEvent(event) {
$(this).removeClass("sad").addClass("happy");
}
$("a.sad").click(handleEvent); // in this case, "this" is the anchor clicked
function differentEvent(event) {
$("input.sad").keydown(e) {
doSomeOtherProcessing();
handleEvent(e); // in this case, "this" will be the window object
// but I'd like to set it to be, say, the input in question
}
}
handleEvent.call(this, e);
Просто укажите параметры, которые вас интересуют:
function doStuff(el) {
$(el).removeClass("sad").addClass("happy");
}
function handleEvent(event) {
doStuff(this);
}
$("a.sad").click(handleEvent); // in this case, "this" is the anchor clicked
function differentEvent(event) {
$("input.sad").keydown(e) {
doSomeOtherProcessing();
doStuff(this);
}
}
Использование
e.target
Я бы посоветовал вам перефразировать вашу функцию как плагин jQuery.
Но вот быстрое исправление:
handleEvent.apply(this,e) //transfers this from one scope, to another
Если вы просто хотите вызвать один обработчик событий, как если бы он запускался нормально, apply
/call
будет работать нормально. Однако, в зависимости от ваших потребностей, может быть более надежным использовать версию аргумента jQuery click(), которая будет запускать all для этого элемента:
function differentEvent(event) {
$("input.sad").keydown(e) {
doSomeOtherProcessing();
$(this).click(); // simulate a click
}
}