この関数を DOM イベントへのコールバックとして渡す必要があります
var fooo = function() {
$(this).append("foo");
fooo = function() {
$(this).append("bar");
};
};
$("#hover").hover(fooo);
この例では、「foo」を追加してから「bar」を追加する必要がありますが、機能しません。私は何を間違っていますか?
この関数を DOM イベントへのコールバックとして渡す必要があります
var fooo = function() {
$(this).append("foo");
fooo = function() {
$(this).append("bar");
};
};
$("#hover").hover(fooo);
この例では、「foo」を追加してから「bar」を追加する必要がありますが、機能しません。私は何を間違っていますか?
これも機能しません:
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);
のコールバックとして割り当てられている関数ではなくfooo
、 に割り当てられている関数を変更しています。.hover
明確にするために、関数をイベントのハンドラーとして渡す場合 (の場合のように) $().hover(fooo)
、変数を渡すのではfooo
なく、それが指す関数を渡します。fooo
別のものに再割り当てしても、元の関数はイベント ハンドラーとしてバインドされたままです。
あなたがやろうとしていることを私がやりたいのなら、私は少し違うパラダイムを使うでしょう. 何かのようなもの
var fooo = (function() {
var altBehavior = false;
return function() {
$(this).append(altBehavior ? "bar" : "foo");
altBehavior = true;
}
})();
$("#hover").hover(fooo);
実際のバインドされた関数は決して変更されませんが、それが存在するコンテキストは変更されます。
fooo
ハンドラー自体を変更せずに、関数を hover イベントに割り当ててから変数を変更しています。バインドを解除してから、別の関数をバインドする必要があります。 hover
は 2 つのイベントの省略形なので、それぞれのバインドを解除します。
var fooo1 = function() {
$(this).append("foo").unbind("mouseenter", fooo1).unbind("mouseleave", fooo1).hover(fooo2);
};
var fooo2 = function() {
$(this).append("bar");
}
$("#hover").hover(fooo1);