2011-07-08 6 views
1

jQueryのdatepicker内の関数にバインドするタグがいくつかあります。しかし、jQueryは、別の関数を親(.ui-datepicker-inline)divのmouseovermouseoutイベントに自動的にバインドします。jQuery/javascriptで子要素のバインド関数を保持する方法

場合によってはこの機能をオーバーライドする必要がありますが、他のイベントが発生した場合は、デフォルトの機能に戻ります。私はバインドしようとしましたmouseover親div(hasDatepicker)とこれはうまくいきました。しかし、親のバインドを解除すると、その子の古いバインド機能も機能しなくなります。どうしてこれなの?それを避ける方法はありますか?子どもがそれを守っているのであれば、私は気にしません。親の束縛がそれを後にしている限り。私はまた、親をバインド解除するときに子機能を失いたくない。

私はjQuery UIコードからわかる限り、元のバインド(.ui-datepicker-inline)を持つ要素であるjQuery要素datePickerを持っています。

// This binds my function, occurring after datePicker's bound function, 
// and works fine. 
datePicker.parent().bind('mouseover', hoverWeek) // hoverWeek is a function(event) 

/* ... */ 

// This unbind's datePicker as well as datePicker.parent() 
datePicker.parent().unbind('mouseover'); 

バインドされた機能を保存し、必要なときに戻すことはできますか?私はしなければならないと思ってはいけませんが、私がしたら、どうしたらいいのでしょうか?関数をバインドするには、datePicker.bind('mouseover')と言うことができますか?いくつかの問題がありました

[更新]:主に私はいくつかの矛盾のコードを持っていたが、bubbling effectを持ついくつかの問題もありました。下記に記載されたソリューションは、両方の良いです、そして将来の参照のために、ここで働く別の解決策は以下のとおりです。http://jsfiddle.net/redEvo/7QpDx/

+0

'hoverWeek()'何をしますか?それは 'mouseover'を妨害することができますか?あなたのように、私はフィドルを作った、それはうまく動作します! – andyb

+0

あなたが上に乗っている日を強調表示するのではなく、[this](http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerSelectWeek.html)と同様に、私はそれを使うことができるほど近くではない)。私がイベントハンドラを日にちに置くと、その週がハイライトされて泡が出て、その日だけがハイライトされます(裸眼で見るには速すぎます)。私が親に置いた場合、オリジナルは決して起こらないようです(デフォルトモードに戻ろうとすると) – redbmk

答えて

2

バインドを解除コールにちょうどあなたの関数を渡すことができます。

datePicker.parent().unbind('mouseover', hoverWeek); 
+0

それは私が思ったものですが、動作していないようです。私はjsFiddleを作ったが、もちろんそれはうまく動作する。 JQueryのUIコードはやや複雑です。理想的には、私は '.ui-datepicker-calendar'クラスだけをバインドすることができますが、祖先のバインドは私の後で発生し、オーバーライドします。 – redbmk

1

私はどのように本当にわからないんだけど私はコードの多くを使わなくても大丈夫です。それは私のためにthis fiddleで動作するようです。私はhoverWeek()を実装しましたが、あなたが私のバージョンよりも多くのことをしているかもしれません。

私は名前空間のイベントを使用して、わずかに異なる方法で.unbind()を使用しています:

datePicker.bind('mouseover.myEvent', hoverWeek); 
関連する問題