开发者问题收集

如何让 JavaScript 函数在不同的 HTML 页面中发挥作用?

2021-08-29
416

我正在构建一个包含多个 HTML 页面的网站,并打算通过 API 填充不同页面的信息。我已将 onclick 侦听器添加到 HTML 元素中,如下所示:

// ASSIGNING ELEMENTS AS VARIABLES

const EPL = document.getElementById('epl'); 
const bundesliga = document.getElementById('bundesliga'); 
const laliga = document.getElementById('laliga');

// ONCLICKS 
EPL.onclick = function() { 
getStandings('2021'); 
location.replace('standings.html');
 } 

bundesliga.onclick = function() { 
getStandings('2088'); 
location.replace('standings.html'); 
}

 laliga.onclick = function() {
 getStandings('2224'); 
location.replace('standings.html'); 
}

当单击其中一个元素时,我会使用其唯一参数调用函数 (getStandings) 以从 API 中获取一些数据。我还想转到另一个 HTML 页面,为此我使用了 location.replace。

我陷入了两难境地:如果我对每个 HTML 页面使用相同的 JS 文件,那么当我进入新的 HTML 页面时,我会收到错误,因为新的 HTML 页面不包含所有元素:

main.js:41 Uncaught TypeError: Cannot set property 'onclick' of null

但是,如果我使用不同的 JS 文件,也许每个 HTML 文件都有一个 JS 文件,那么我就无法传递我需要的信息。如何才能转到新的 HTML 页面(带有自己的 JS 文件),而不会停止并丢失我当前所在的函数中旧页面的 JS 文件下的所有内容?例如,参数“2021”或“2088”将传递到 getStandings() 函数中,该函数将使用来自 API 的数据填充新的 HTML 页面。如果我跳转到带有新 JS 文件的新 HTML 页面,则会丢失这些数据。

有没有更好的方法来组织我的文件?😐😐😐😐😐

3个回答

您可以在元素不为空的条件下设置事件监听器,例如

const EPL = document.getElementById('epl'); 
const bundesliga = document.getElementById('bundesliga'); 
const laliga = document.getElementById('laliga');

if(EPL){
    EPL.onclick = function() { 
        getStandings('2021'); 
        location.replace('standings.html');
    } 
}

etc...


Jacob Riches
2021-08-29

解决了!正如 amn 所说,我可以将 URL 参数 添加到新 HTML 页面 URL 的末尾,然后一旦进入新 HTML 页面,就可以从其自己的 URL 获取变量。

Sun R
2021-08-30

我认为我宁愿使用类而不是 ID 来定义监听器,也许使用专门操作的 ID。

Christophe
2021-08-29