IFrame の使用の有無はエラーの原因ではありません。コンテナーを使用して、それを使用せずに ajax 経由で fancybox をロードしようとしましたが、違いはありませんでした。
私が見つけたのは一種のハックですが、問題は解決します。ポップアップを作成するコードがあり、ポップアップのコンテンツが href 'popupFrame' にあるとします。
$.fancybox({
'href': 'popupFrame',
'type': 'ajax',
beforeClose: removeKendoHelpers
});
もう 1 つの部分は、ポップアップを閉じる前に呼び出される関数です。
function removeKendoHelpers() {
$("#myDropdown-list").remove();
}
もちろん、removeKendoHelpers をインライン関数として作成し、さらに削除する部分がある場合は、そのコードを removeKendoHelpers 関数に入れることもできます。
興味深い点として、fancybox API では onCleanup と onClosed がオプションとしてリストされていますが、機能しません。代わりに beforeClose または afterClose を使用してください。
アップデート:
実際、剣道ウィジェットの destroy() メソッドを呼び出すことで、多くの問題が解決されます。DateTimePicker の 3 つのヘルパー div の 1 つを除いて、ウィジェットの削除の問題が解決されるため、クローズは次のようになります。
function removeKendoHelpers() {
$("#myDropdown-list").data("kendoDropDownList").destroy();
$("#datetimepicker").data("kendoDateTimePicker").destroy();
}
そして、日時ピッカーの実際の問題を解決するには、kendop フレームワークのバグだと思います (これを報告し、フィードバックが得られることを願っています)。最後の関数は次のように拡張するだけで済みます。
$(".k-widget.k-calendar").remove();
その他の解決策:
これはもっと大雑把ですが、ページに複数の剣道コントロールがあり、ファンシーボックスから別のファンシーボックスを開いたとしても、私にとっては魅力のように機能します.
次のように、fancybox の作成を関数でラップします。
function openFancyBox() {
$("body").append("<div class='fancybox-marker'></div>");
$.fancybox({
'href': 'popupFrame',
'type': 'ajax',
beforeClose: removeKendoHelpers
});
}
これにより、body タグの最後に新しい div が作成され、fancybox を閉じる関数はこれを使用します。
function removeKendoHelpers() {
$(".fancybox-marker").last().nextAll().remove();
$(".fancybox-marker").last().remove();
}
これらがあなたの問題をすべて解決することを願っています!