JQuery将this传递给函数

4

我需要将this发送到capIn()和capOut()函数中,以便我可以定位到正确的.slide子div。如何将this传递给函数。这里指的是鼠标悬停的元素。

$(".slide").hover(function(){capIn();capOut();});

1
这是你实际的代码吗?你只是在调用那些函数吗?你真的想让它们在“mouseenter”和“mouseleave”事件中都被调用吗? - user1106925
3个回答

11

从函数名 capIncapOut 来看,它们是两种不同的行为。我认为你需要在 mouseentermouseleave 事件上分别执行两种不同的行为。而 hover 方法可以接收两个方法作为参数,一个用于处理 mouseenter 事件,另一个用于处理 mouseleave 事件。你可以尝试这样做:

$(".slide").hover(capIn, capOut);

你可以在 capIncapOut 内使用 this ,它将指向你悬停的 .slide 元素。

function capIn(){
   var $childrens = $(this).children();
}

function capOut(){
   var $childrens = $(this).children();
}

1
这可能是所需的内容,但它并不完全与问题中的代码相同。 - user1106925
我相信这是OP的最终要求。 - ShankarSangoli
请注意,您的代码与原始发布者的代码并不相同。原始发布者在mouseentermouseleave上同时调用两个函数。而您的代码在mouseenter上调用capIn,在mouseleave上调用capOut。现在,从原始发布者函数的名称来看,这可能是他们真正想要的,但我仍然想强调一下。 - T.J. Crowder
1
看到函数名capIncapOut,它们代表了两种不同的行为,这是有道理的。也许楼主不知道hover函数对于mouseentermouseleave事件需要分别指定两个处理程序。 - ShankarSangoli
是的,那也是我的猜测,但我同意@T.J.Crowder的观点,在答案中注明这一点是很好的。 - user1106925
显示剩余4条评论

10
$(".slide").hover(function(){
    capIn.apply(this);
    capOut.apply(this);
});

看这里:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

更新:

如果capIn是为mouseentercapOut是为mouseleave,那么:

$(".slide").hover(function(){
    capIn.apply(this);
}, function(){
    capOut.apply(this);
});

ShankarSangoli的解决方案更为简洁,但如果除了this之外还需要传递其他参数,则可以使用capIn.apply(this, arguments)


1
这不应该得到-1。它正确地复制了问题中的代码,但在函数中设置了“this”值。我唯一要添加的是发送“arguments”,以防需要“event”或任何自定义参数。 - user1106925
1
在第二个例子中,不需要使用 ...hover(function() { capIn.apply(this); }, function() { capOut.apply(this); }),只需要 ...hover(capIn, capOut) 即可。在第一个例子中,根据 @amnotiam 的观点,应该是 capIn.apply(this, arguments); - T.J. Crowder
.hover(capIn.apply(this), capOut.apply(this)) 不起作用。fn.apply(...) 是一个函数调用,因此您需要将其包装在匿名函数中。 - dgilland

0
这对我有效:
function capOut(jq) {
    alert(jq.hasClass('slide'))
}

$(".slide").hover(function () {
    capIn(this),
    capOut($(this)) //to pass a jQuery object wrapping 'this'
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接