我一直在尝试研究如何在使用 Twitter Bootstrap 时从模式对话框中删除数据 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 () {
和 对应的});
,则可以取消绑定事件。那么,现在的问题是,为什么在包装器存在时无法解除这些事件的绑定?
解析度
我没有认识到 the$(function() { ... });
是 的简写$(document).ready
,尤其是当它甚至不需要.off
and时.on
。因此,在插件删除那段代码之前,我发现以下内容可以完成这项工作:
$(function() {
$(document).off(".modal.data-api");
});