我有:
<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作为暂停函数的参数传递?
答案 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