私の問題は、jquery uiダイアログショーにコールバックをアタッチする方法がわからないことです。
ショーは実際にはオプションです:
$( ".selector" ).dialog({ show: 'slide' });
スライドアニメーションの完了後にコールバックを取得したいのですが。私はエフェクト自体から見て、コールバックがあります:
effect( effect, [options], [speed], [callback] )
ただし、ダイアログでは、効果の設定が大きく異なります。私も入れてみました:
$( ".selector" ).dialog({ show: 'slide', callback: function() {} });
しかし、それはうまくいきませんでした。
提案?
Update 2015-07-27jQuery v1.10.0以降を使用している人は、 this other answer を参照してください私の解決策はjQueryの新しいバージョンで作業します。
元の答え
回答済みですが、回答があったのでとにかく投稿します…
$('#dialog').dialog({
show: {
effect: 'slide',
complete: function() {
console.log('animation complete');
}
},
open: function(event, ui) {
console.log('open');
}
});
Consoleにopen
の後にanimation complete
が表示されます
2年後、(@ andybによって)提案されたソリューションは、jQuery UIの現在のバージョン(特にv1.10.0以降)では動作しなくなりました。彼の解決策はcomplete
コールバックメソッド-ドキュメント化されていない機能に依存していました。
JQuery Promise
オブジェクトを使用して、最新のソリューションを思いつきました:
$("#dialog").dialog({
show: {
effect: "drop",
direction: "up",
duration: 1000
},
hide: {
effect: "drop",
direction: "down",
duration: 1000
},
open: function () {
$(this).parent().promise().done(function () {
console.log("[#Dialog] Opened");
});
},
close: function () {
$(this).parent().promise().done(function () {
console.log("[#Dialog] Closed");
});
}
});
これが通常のJSFiddleデモです: http://jsfiddle.net/losnir/jcmpm/
Jquery ui devバンドルをダウンロードし、コールバックが「complete」で設定されていることを確認しました。
$( ".selector" ).dialog({ show: 'slide', complete: function() {} });
これを解決しようとするすべての人に感謝します:)
ダイアログのopen
イベントを使用してみてください:
$( ".selector" ).dialog({
open: function(event, ui) { ... }
});
「focus:」イベントを使用する必要があることがわかりました。 show:のため、正しく選択されたボタンを失っていました。素敵な相互作用。
focus: function( event, ui ) {
$(this).siblings('.ui-dialog-buttonpane').find("button:contains('Upload')").focus();
},