タブがajax経由でロードされたときにJQuery UIでイベントを再バインドする適切な方法はありますか?たとえば、以下のコードでは、successイベントを呼び出すと、異なるクラスのカスタムクリックイベントハンドラを設定する 'initBinding()'関数があります。この問題は、タブを数回切り替えてクリックイベントの1つをオフにすると、奇妙な画面フリッカー効果が発生します。ページ全体をリフレッシュしてから、クリックイベントに直接移動すると、フリッカーは発生しません。だから私はそれが何度も束縛することと関係があると思う。JQuery UIタブ - ajax経由でロードされたタブのイベントを再バインドする
「initBinding()」メソッドを成功イベントから外した場合、ajax経由でロードされたタブは設定したイベントをトリガーしません。このようなバインディングイベントを処理する標準的な方法がありますか?
$(document).ready(function() {
$("#tabs").tabs({
select: function (event, ui) {
var tabID = "#ui-tabs-" + (ui.index + 1);
$(tabID).html("<b>Fetching Data....Please wait....</b>");
},
ajaxOptions: {
error: function (xhr, status, index, anchor) {
$(anchor.hash).html("Could not load tab data");
},
success: function (xhr, status, index, anchor) {
initBinding();
}
}
});
});
function initBinding() {
$(".editButton").click(function() {
//event logic...
});
}
ありがとう、それは完璧に働いた! – Brosto
クラスをjquery UIメソッドにバインドする同様のメカニズムはありますか?たとえば、$( 'div.accordion')。accordion();があるとします。 'accordion'のクラスを持つdivを持つajax経由でページを読み込むと、それはアコーディオン効果で読み込まれません。そのシナリオで動作するlive()に似た何かがありますか? – Brosto
jQuery 1.7以降、.live()メソッドは推奨されていません。 .on()を使用してイベントハンドラをアタッチします。 – DavidDraughn