我正在使用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
}
}
答案 0 :(得分:12)
答案 1 :(得分:4)
只需参数化您感兴趣的功能:
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);
}
}
答案 2 :(得分:1)
使用
e.target
答案 3 :(得分:1)
我建议你将你的函数重新分解为jQuery插件。
但这是一个快速修复:
handleEvent.apply(this,e) //transfers this from one scope, to another
答案 4 :(得分:0)
如果您只是想将单个事件处理程序调用为正常触发,apply
/ call
将正常工作。但是,根据您的需要,使用jQuery的click()函数的零参数版本可能会更加健壮,这将触发该元素的所有点击处理程序:
function differentEvent(event) {
$("input.sad").keydown(e) {
doSomeOtherProcessing();
$(this).click(); // simulate a click
}
}