2

我有:

<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

4 回答 4

4

每次调用$,它都会返回一个不同的结果集对象,即使结果内容相同。你要做的检查是:

if (pauseMe.is("#leftBubble")) {
于 2012-04-17T20:41:41.547 回答
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));
  });
});
于 2012-04-17T20:47:13.797 回答
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。

于 2012-04-17T20:42:00.110 回答
0

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

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

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

a == b // false
d == c // true
于 2012-04-17T20:48:10.220 回答