jQuery プラグインを作成していて、プラグインのイベントを本体にバインドし、特定の子要素にデリゲートするという興味深い問題に遭遇しました。
これは問題ありませんでしたが、プラグインは同じページで複数のインスタンスをサポートするように構築されているため、プラグインがページに存在する回数だけイベントが発生します。(何度も縛られている)
ウィンドウに関連付けられているブール値フラグ以外に、プラグイン コード内から一度だけバインドする方法はありますか?
プラグインコードの外側にバインドして1回だけバインドするか、タイマーを1回だけ設定することで問題を解決できますが、イベントが20回発生しないようにしたいと思います。他に方法があればもっと探します..
考えられる解決策
if (!window.tip.hoverIntent || window.tip.hoverIntent === undefined) {
//bind handler..
window.tip.hoverIntent = true;
}
イベントハンドラ
$('body').on({
mouseenter: function() {
clearTimeout(window.tip.timerID);
},
mouseleave: function() {
window.tip.timerID = setTimeout(function() {
$('.tip-shown').remove();
}, 250);
}
}, '.tip-shown');