jQuery将$ this传递给函数参数

时间:2012-04-17 20:38:49

标签: javascript jquery this

我有:

<img id="leftBubble" class="bubbles" src="left.png" />
<img id="rightBubble" class="bubbles" src="right.png" />

像这样的悬停事件:

$(".bubbles").each(function(){
    $(this).hover(function() { 
        pause($(this));
    }, function() {
        play(4000, $(this));
    });
});

我的pause()函数似乎无法正常工作

function pause(pauseMe) {
    if (pauseMe == $("#leftBubble")) {
        clearTimeout(timer1);                        //this is never reached
    } else if (pauseMe == $("#rightBubble")) {
        clearTimeout(timer2);                        //nor this
    }
}

让悬停事件的任何想法都将$ this作为暂停函数的参数传递?

4 个答案:

答案 0 :(得分:4)

每次调用$时,即使结果内容相同,也会返回不同的结果集对象。你必须做的检查是:

if (pauseMe.is("#leftBubble")) {

答案 1 :(得分:4)

尝试如下,

function pause(pauseMe) {
    if (pauseMe == "leftBubble") {
        clearTimeout(timer1);
    } else if (pauseMe == "rightBubble") {
        clearTimeout(timer2);
    }
}

并且在来电者中

$(".bubbles").each(function(){
  $(this).hover(function() { 
    pause(this.id);
  }, function() {
    play(4000, $(this));
  });
});

答案 2 :(得分:0)

在javascript中,每次输入新的函数定义时都会重新定义this。如果您想访问外部 this,您需要在变量(我使用self)变量中保留对它的引用。

$(".bubbles").each(function(){
    var self = this;
    $(this).hover(function() { 
        pause($(self));
    }, function() {
        play(4000, $(self));
    });
});

我不知道你的jQuery对象之间的比较是否会起作用。也许你可以比较DOM元素:pauseMe[0] == $("#leftBubble")[0],或者,如上所述,ids。

答案 3 :(得分:0)

当您致电$( ... )时,它会生成与上次调用$( ... )时生成的新对象不同的对象,具有相同的参数。

无论如何,您无法在javascript中将对象与==进行比较。只有当它在同一个对象上时,它才会返回true

a = {b:1}
c = {b:1}
d = c

a == b // false
d == c // true