【发布时间】:2018-12-10 00:19:09
【问题描述】:
我正在开发一个单页应用程序网站。所有的导航都发生在一个 div 中。我使用 addEventListener click 来查找链接,防止常规 href 并在 div 中打开它。
使用此代码,我可以更改页面,保留页眉和页脚而不刷新整个页面。
var spa_array = Array.from(document.getElementsByClassName('spa')); // Array with history (for the back button)
spa_array.forEach( function(b) {
var id = b.id;
b.addEventListener('click', function(e) {
event.preventDefault(); // Prevent href
history.pushState({id:id}, null, id); // Change url on browser
openPage(id);
});
});
window.addEventListener('popstate', function(e) {
openPage(e.state.id);
});
function openPage(url) {
var encodedUrl = encodeURI(url);
$("#spa").load(encodedUrl); // open link inside the div
}
这就是问题发生的地方:我使用 JS 在 div 上加载一个新页面,例如 index_2.html。 index_2.html页面上的链接不会触发JS addEventListener,所以会刷新页面并打开新的链接。
JS 未应用于在 .load 中打开的页面。有没有办法应用相同的脚本,而无需再次调用它(这会导致很多麻烦)?
【问题讨论】:
-
您不需要在每次重新加载内容时重新附加事件侦听器。只需听宿主元素 (#spa) 的“点击”事件。由于“冒泡”,您将在其中获得所有子元素的“点击”事件。
标签: javascript jquery single-page-application