jQuery 无法处理 AJAX 加载的 html 内容
Posted
技术标签:
【中文标题】jQuery 无法处理 AJAX 加载的 html 内容【英文标题】:jQuery not working on AJAX loaded html content 【发布时间】:2015-06-29 06:18:07 【问题描述】:我有一个使用引导主题的 php 管理仪表板。我们知道它具有内置的 jQuery 对象,如下拉菜单、折叠、选项卡等,如果我们只添加引导 js 文件,这一切都将起作用。
现在的问题是当我从 ajax 调用中获取内容并将其显示在我的页面上时,所有通过 ajax 加载的 javascript 控件都无法正常工作。
我正在使用这个 ajax 调用来显示我所有的内页。所以它可能对加载的 html 有任何引导 javascript 控件。
那么我怎样才能在每次 ajax 调用时动态解决这个问题。我的ajax加载javascript如下
$('a').bind('click',function(event)
event.preventDefault();
$.get(this.href,,function(response)
$('#app-content-body').html(response)
);
);
注意:我的问题不在我上面的代码中。实际问题是当我从上面的代码加载 html 内容时,引导 javascript 控件不起作用
【问题讨论】:
你是如何加载 HTML 的? jQuery不添加点击事件吗?也许你有旧版本的 jQuery? 我的 HTML 加载脚本在上面,它工作正常。我的意思是当我在我的 div 中加载 HTML 内容时,javascript 无法处理加载的 HTML 【参考方案1】:jQuery 仅在页面运行时才知道页面中的元素,因此添加到 DOM 的新元素无法被 jQuery 识别。为了解决这个问题,使用event delegation,从新添加的项目中冒泡事件直到 jQuery 在页面加载时运行时所在的 DOM 中的某个点。许多人使用document
作为捕捉冒泡事件的地方,但没有必要在DOM 树上爬那么高。理想情况下you should delegate to the nearest parent that exists at the time of page load.
将你的点击事件改为使用on()
,前提是你的jQuery版本支持它;
$(document).on('click', 'a', function(event)
如果您使用 jQuery 1.7 之前的版本,请使用 delegate()
:
$('body').delegate('a' , 'click', function()
注意操作符的顺序,它们与on()
不同,读起来更合乎逻辑。
【讨论】:
不,我不是在谈论上面的点击事件。我的意思是,如果 ajax 加载的 html 有一些引导导航菜单、选项卡、下拉菜单等,那一切都不起作用。 同样的问题,要么重新绑定引导函数,要么转换为事件委托。 是的,我知道。我必须重新绑定。但我不知道在 ajax 加载之后会出现哪些引导 javascript 控件。那么如何重新绑定 Bootstrap 中的所有内容呢?比如下拉菜单、标签等,以上是关于jQuery 无法处理 AJAX 加载的 html 内容的主要内容,如果未能解决你的问题,请参考以下文章
脚本无法在 AJAX 页面加载时修改 jQuery Mobile 页面上的页脚?
jQuery调用已被ajax加载或通过html()方法插入的div元素