【问题标题】:Alternative to load() in jQuery 3 For Loading Bootstrap 4 Modal Remote ContentjQuery 3 中 load() 的替代方法,用于加载 Bootstrap 4 模态远程内容
【发布时间】:2018-07-26 10:10:24
【问题描述】:

将另一个页面/内容(也称为“远程”内容)加载到 Bootstrap 模式中一直是许多开发人员的祸根,而像这样的出色解决方案很有效:

$('body').on('click.modal.data-api', '[data-toggle="modal"]', function(){
  $($(this).data("target")+' .modal-content').load($(this).attr('href'));
});

使用上述方法,您可以进行一次脚本调用,并将其应用于任何具有加载内容的模式的页面,无论是本地的还是远程的。应该注意的是,对于“本地”模态,您不能拥有 href 属性(即使是带有哈希值的属性),它也适用于(本地和远程)。这可以包含在页脚文件或应用程序中的任何其他全局包含文件中,因此它只驻留在一个位置,并且适用于应用程序中的每个模式。

但是,在 jQuery 3 中,load() 方法已被贬低,那么鉴于此,如何加载远程模态内容?

我知道您可以使用 ajax(),但有没有办法像我上面的示例那样将其构建得更“动态”,这样就不需要为每个模式都有一个独特的脚本?

【问题讨论】:

  • 感谢@Taplar,这是一个解决方案,因此可以使用一个脚本在本地或远程内容加载模式:$('body').on('click.modal.data-api', '[data-toggle="modal"][href]', function(){ $($(this).data("target")+' .modal-content').load($(this).attr('href')); }); 理想情况下,这应该包含在您的应用程序中全局包含的脚本中,就像页脚文件一样,任何可能具有模式(本地或远程)的页面都会正确触发。

标签: jquery bootstrap-modal bootstrap-4 jquery-3


【解决方案1】:

Load 已作为快捷事件处理程序绑定被删除,而不是用于加载外部资源。

--绑定,已移除
http://api.jquery.com/load-event/

--加载ajax数据的方法,依然有效
http://api.jquery.com/load/

因此,由于您的逻辑使用的是第二个版本,因此它在 3x 中仍然有效。

【讨论】:

  • 如果我的逻辑是有效的,那么为什么在使用 jQuery Migrate 时,我会在控制台中收到这些警告:JQMIGRATE: jQuery.fn.load() is deprecated 我正在使用 jQuery Migrate 3.0.0
  • 迁移工具可能无法区分两种不同的加载形式,如果它看到命名空间上的方法,则简单地给出。或者,也许您在代码库的其他地方使用了已弃用的第一种形式。
  • 正如我所提到的,像这样抽象逻辑的目标是有一个脚本来管理任何模式,本地或远程。我在全局包含的页脚文件中有此代码,因此在我的应用程序中具有模式的任何页面都可以使用此脚本来处理模式加载。我将尝试注释掉 jQuery Migrate 并查看模式是否仍然有效(因为 Migrate 的目的是添加它们在 jQuery 3 中弃用的 API)。
  • 更新:果然,模态仍然有效(所以你可能是正确的),但现在使用本地模态(例如,其内容在现有调用页面上而不是远程加载的模态),即使他们工作,他们抛出以下错误:Uncaught TypeError: Cannot read property 'indexOf' of undefined 我猜是因为在我的本地模式的调用链接中没有href
  • 你可以在你的 load 语句周围放置一个条件来检查元素上是否有 href。或者实际上将其添加到您的子选择器中。将“[href]”添加到它。 '[data-toggle="modal"][href]'
猜你喜欢
  • 2017-05-05
  • 2020-02-16
  • 1970-01-01
  • 2013-12-03
  • 2018-08-10
  • 2017-03-27
  • 1970-01-01
  • 2020-02-15
  • 2018-10-07
相关资源
最近更新 更多