元の、受け入れられた答え
HTML idタグのつづりを間違えたため、何も起こりませんbtnClose
(あなたはそれを呼んでいますbtnCloset
)。それにもかかわらず、提供されたコードでは機能しません。これが機能するためです。btnClose
リンクをクリックすると、からsimpleModalボックスが作成され、#content
閉じたときに、onClose
オプション(これは正しいです)。つまり、実際にはどこかで閉じるように指示しているのではなく、モーダルダイアログであると指示しているだけです。
代わりに、現在のように要素からモーダルを作成する必要がありますが、のクリックイベント#content
とは別に作成してください。#btnClose
次に、クリックイベントをバインドしてダイアログを閉じる必要があります。
ここにいくつかのコードがあります
$(function() {
/* Make #content a modal */
$("#content").modal(
{
onClose: function(dialog) {
dialog.data.fadeOut('slow', function () {
dialog.container.slideUp('slow', function () {
dialog.overlay.fadeOut('slow', function () {
$.modal.close(); // must call this!
});
});
});
}
}
);
/* When #btnClose is clicked, close the modal */
$('#btnClose').click(function(e) {
$.modal.close();
});
});
ちなみに、にクラス
simplemodal-close
を追加すると
#btnClose
、simpleModalによって自動的にダイアログが閉じます。クリックイベントを自分でバインドする必要はありません。
フィードバックに基づく新しい回答
わかりました。このアドオンがどのように機能するかを誤解しました。プレーンなjQueryダイアログプラグインのようなものだと思いましたが、今理解しているように、目標は既存の表示可能な要素をダイアログにし、閉じるときに元の形式に戻すことです。 。新しいコードは、ダイアログの状態を追跡し(リンクに保存doOpen
し、data
クリックするたびに切り替えることで)、ダイアログを開いたり閉じたりします。これがあなたがそれを機能させたかった方法に近いことを願っています:)
$(function() {
$("#btnClose")
.data("doOpen", true)
.click( function() {
/* check whether or not we are to open or close the dialog */
var doOpen = $(this).data("doOpen");
/* toggle the data */
$(this).data("doOpen", !doOpen);
if (doOpen) {
$("#content").modal({
onClose: function(dialog) {
dialog.data.fadeOut('slow', function () {
dialog.container.slideUp('slow', function () {
dialog.overlay.fadeOut('slow', function () {
$.modal.close(); // must call this!
});
});
});
}
});
}
else {
$.modal.close();
}
});
});