我需要将此函数作为回调传递给DOM事件
var fooo = function() {
$(this).append("foo");
fooo = function() {
$(this).append("bar");
};
};
$("#hover").hover(fooo);
此示例应附加"foo“,然后附加"bar"s,但它不起作用。我做错了什么?
发布于 2012-04-29 14:17:02
您要更改的是分配给fooo
的函数,而不是分配为.hover
回调的函数。
为了清楚起见,当您传递一个函数作为事件的处理程序时--就像$().hover(fooo)
的情况一样--传递的不是fooo
的变量,而是它所指向的函数。如果您将fooo
重新分配给其他函数,则原始函数仍然是绑定为事件处理程序的函数。
如果我想做你想做的事情,那么我会使用一个稍有不同的范例。就像这样
var fooo = (function() {
var altBehavior = false;
return function() {
$(this).append(altBehavior ? "bar" : "foo");
altBehavior = true;
}
})();
$("#hover").hover(fooo);
实际的绑定函数永远不会改变,但它所在的上下文会改变。
发布于 2012-04-29 14:16:15
这也不会起作用:
var fooo = function() {
$(this).append("foo");
};
$("#hover").hover(fooo);
fooo = function() {
$(this).append("bar");
};
因为您更改了变量,但没有更改传递给hover
事件的回调。
您需要将新函数指定为回调函数:
var fooo = function() {
$(this).append("foo");
};
$("#hover").hover(fooo);
fooo = function() {
$(this).append("bar");
};
$("#hover").unbind('hover').hover(fooo);
发布于 2012-04-29 14:22:56
您将函数fooo
分配给hover事件,然后更改变量,而不更改处理程序本身。您应该先解除绑定,然后再绑定另一个函数。hover
是两个事件的缩写,因此请分别解除绑定:
var fooo1 = function() {
$(this).append("foo").unbind("mouseenter", fooo1).unbind("mouseleave", fooo1).hover(fooo2);
};
var fooo2 = function() {
$(this).append("bar");
}
$("#hover").hover(fooo1);
https://stackoverflow.com/questions/10372785
复制