我一直在努力研究如何在使用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");
});