为动态加载的 HTML 内容触发 Bootstrap JS 行为

roh*_*son 5 javascript jquery twitter-bootstrap-3

我正在动态加载包含 Bootstrap 标记的 HTML 模板。但是,Bootstrap Javascript 行为不会应用于加载的内容。例如,如果加载的内容包含 Bootstrap 模式的标记,则该模式将无法正确运行。

有没有办法可以触发 Bootstrap刷新或将其 Javascript应用到新加载的内容?

Rya*_*yan 1

您需要在加载动态内容的任何函数/请求对象的回调中初始化模式

没有看到你的代码很难说,但是像这样

require(['!text/myDynamicTemplate.html'], function(template){
   //logic to render the template and/or insert it into the dom here

   $('#myModal').modal(options)
})
Run Code Online (Sandbox Code Playgroud)

编辑:

Bootstrap 单独定义了它的 javascript 插件。没有全局引导对象

这是工具提示的插件定义

  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.tooltip')
      var options = typeof option == 'object' && option

      if (!data && /destroy|hide/.test(option)) return
      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }

  var old = $.fn.tooltip

  $.fn.tooltip             = Plugin
  $.fn.tooltip.Constructor = Tooltip


  // TOOLTIP NO CONFLICT
  // ===================

  $.fn.tooltip.noConflict = function () {
    $.fn.tooltip = old
    return this
  }

}(jQuery);
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过 $('#myID').tooltip 访问的唯一内容是构造函数和初始化程序

在不修改引导程序代码的情况下可以做到的最好的事情

$('[data-toggle=tooltip]').tooltip()

  • 虽然这可能是残酷的事实,但似乎必须有更好的方法。如果我的标记包含其他组件(例如警报、工具提示和模式)怎么办?我需要在 JS 中重新创建所有这些吗?似乎应该有一个`bootstrap.refresh('#content')`之类的东西。 (3认同)