Twitter Bootstrap を使用しているときに、モーダル ダイアログから data-api を削除する方法を考え出そうとしています。現在のビルド (バージョン 2.3.2) を使用しており、次のすべてを試みました。
body
(文書化されているように)とdocument
(イベントが実際にバインドされているように見える場所であるため)の両方でモーダルデータAPIを削除するだけでも、イベントは発生します。
$("body").off(".modal.data-api");
$(document).off(".modal.data-api");
次に、データ API 全体 (本体とドキュメントの両方) を削除しようと考えましたが、どちらも機能しませんでした。
$("body").off(".data-api");
$(document).off(".data-api");
さらに、上記のそれぞれでセレクター[data-toggle="modal"]
を指定しようとしましたが、役に立ちませんでした。
どんな提案もありがたく受け取られます。
アップデート
https://github.com/jschr/bootstrap-modal/blob/master/js/bootstrap-modal.jsでは、イベントが jQuery に渡される関数にラップされてバインドされているためと思われます。
$(function () {
$(document).off('click.modal').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
var $this = $(this),
href = $this.attr('href'),
$target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))), //strip for ie7
option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
e.preventDefault();
$target
.modal(option)
.one('hide', function () {
$this.focus();
})
});
});
$(function () {
対応するを削除すると});
、イベントのバインドを解除できます。では、ここで問題となるのは、ラッパーが存在するときにこれらのイベントをバインド解除できないのはなぜですか?
解像度
$(function() { ... });
私は、 が の省略形であることを認識していません$(document).ready
でし.off
た.on
。したがって、プラグインがそのコードのビットを削除するまで、次の方法で問題が解決することがわかりました。
$(function() {
$(document).off(".modal.data-api");
});