2

我一直在尝试研究如何在使用 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,尤其是当它甚至不需要.offand时.on。因此,在插件删除那段代码之前,我发现以下内容可以完成这项工作:

$(function() {
    $(document).off(".modal.data-api");
});
4

0 回答 0