Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于多个页面和按钮的addEventListener_Javascript_Html - Fatal编程技术网

Javascript 用于多个页面和按钮的addEventListener

Javascript 用于多个页面和按钮的addEventListener,javascript,html,Javascript,Html,我太习惯于在react和组件中工作了,所以在vanilla JS中这样做有时会让我的大脑一片空白 我有一个包含多个页面/URL的网站。某些页面具有用户可以交互的独特样式 我有一个文件script.js。我使用document.getElementsByClassName获取元素,然后使用addEventListener进行“单击”等操作。当我只在一个页面上工作时,我从未注意到当我开始构建第二个页面时,脚本会中断,因为它找不到元素(上一个页面上的元素) 这是有道理的,但是你如何解决这个问题呢?我的

我太习惯于在react和组件中工作了,所以在vanilla JS中这样做有时会让我的大脑一片空白

我有一个包含多个页面/URL的网站。某些页面具有用户可以交互的独特样式

我有一个文件
script.js
。我使用
document.getElementsByClassName
获取元素,然后使用
addEventListener
进行“单击”等操作。当我只在一个页面上工作时,我从未注意到当我开始构建第二个页面时,脚本会中断,因为它找不到元素(上一个页面上的元素)

这是有道理的,但是你如何解决这个问题呢?我的整个脚本用
window.onload
封装

比如说,

页面1.html

<button class="first"> Click me </button>

在这种情况下,此脚本将无法工作,因为在尝试查找元素和添加事件侦听器时会中断

正如@epascarello提到的,解决方案很简单


将事件侦听器包装在
if(element)
语句中

另一种解决方案是向按钮添加onclick事件,如下所示

<button onclick="myFunction()">Click me</button>.
点击我。

并在js fie中定义函数。

它不会起作用,因为您将引用一个不存在的元素。因此,在使用之前先检查元素是否存在。是否有什么东西阻止您直接在每个按钮的html中使用
onclick
属性?(即,
单击我
)您可以将事件侦听器包装在条件中
if(buttonOne)…
是的。在@epascarello评论之后,我意识到了这一点。就是这样。我不敢相信我忽略了这一点。谢谢
var buttonOne = document.getElementsByClassName("first")[0];
var buttonTwo = document.getElementsByClassName("second")[0];

buttonOne.addEventListener('click',function(){
        firstFun(); 
})

buttonTwo.addEventListener('click',function(){
        secondFun(); 
})

function firstFun () { .. }
function secondFun () { .. }
<button onclick="myFunction()">Click me</button>.