【发布时间】:2016-02-20 22:48:10
【问题描述】:
我正在尝试编写一个通用的 javascript 脚本以方便点击 <a href> 链接,同时只替换内部 HTML 而不是重新加载整个页面。奇怪的是,它可以工作,除了新加载的 HTML 内的任何链接。
<script src="{{ asset('bundles/app/js/jquery-2.2.0.min.js') }}"></script>
<script src="{{ asset('bundles/app/js/jquery.menu-aim.js') }}"></script>
<script src="{{ asset('bundles/app/js/main.js') }}"></script>
<script type="text/javascript">
$(document).ready(function() {
$("a").on("click", function(){
event.preventDefault();
$.ajax({
'url': $(this).attr('href'),
type: "post",
success: function(response, status) {
document.getElementById("content").innerHTML = response;
},
error: function() {
console.log('failure');
}
});
});
});
</script>
当我将加载的 HTML 中的完全相同的 URL 直接放在包含初始链接的侧边栏菜单中时,它可以正常加载。根据文档, .on 函数应该将自己附加到以后添加的任何元素上。我也按照旧答案的建议尝试了 .delegate 和已弃用的 .live ,但后来连菜单侧边栏都停止工作了。
我在这里错过了什么?
【问题讨论】:
-
您还需要在新加载的 HTML 上安装点击处理程序。
-
您需要将 click 事件委托给动态添加的内容,例如
$(parentElement).on("click", "a", function(){...,其中 parentElement 应该是一个不会自行动态加载的元素。您也可以将文档用作 parentElement。 -
它应该会中断,因为
event未定义 -
我的问题不同,因为我不是动态创建元素,而是在另一个已经打开的页面中加载现有页面
标签: javascript jquery html ajax