我从我的几个不同项目中注意到,每当我单击某些内容时,我都会添加一个 onClick 函数,当页面新加载时,总是需要单击两次才能使其运行。 我使用的一般结构是:
function PageChange(){
var welc_p = document.getElementById("welcome");/**gathers page DIVs**/
var page01 = document.getElementById("page01");
var page02 = document.getElementById("page02");
var start = document.getElementById("start_btn");/**gathers buttons**/
var p1_back = document.getElementById("p1_back");
var p1_next = document.getElementById("p1_back");
var p2_back = document.getElementById("p2_back");
var p2_next = document.getElementById("p2_back");
start.onclick=function(){
page01.style.display="block";
welc_p.style.display="none";
window.location="#page01";
};
}/**function**/
那么我在html中调用它的方式是
<div class="some_class" id="start_btn" onClick="PageChange()">!!!LETS GET STARTED!!!</div>
这也是它的一个小提琴。 https://jsfiddle.net/Optiq/42e3juta/
这通常是我每次想要创建此功能时构建它的方式。 我在这里看到了大量关于他们的项目需要点击两次才能激活的帖子,但他们都没有做任何接近我想要完成的事情,而且他们的问题似乎出在他们的编码中。有谁知道为什么会这样吗?
这是因为您在单击按钮时将 事件处理程序附加到按钮。
这意味着单击按钮会激活事件处理程序,而不是 start.onclick=function() {
从 YouTube 示例中偶然发现这段代码,它解决了我的问题。我想嵌套多个级别的子菜单,并对其原始实现进行了修改,以最适合我的响应式移动菜单。
var a;
function toggleFirstLevelMobileSubMenu(){
if(a==1){
document.getElementById("mobile-sub-menu-depth-1").style.display="none";
return a=0;
}
else {
document.getElementById("mobile-sub-menu-depth-1").style.display="flex";
return a=1;
}
}
var b;
function toggleSecondLevelMobileSubMenu(){
if(b==1){
document.getElementById("mobile-sub-menu-depth-2").style.display="none";
return b=0;
}
else {
document.getElementById("mobile-sub-menu-depth-2").style.display="flex";
return b=1;
}
}
当然,在 CSS 中我为两个 ID 设置了
display: none
。
yourFunction();
function yourFunction(){
-- content --
}
重复函数调用:如果多次调用附加事件侦听器的函数,则每次调用都会向同一元素添加一个新的事件侦听器。每个监听器都会在事件发生时触发,从而导致处理程序的多次执行。
只需将代码移出函数,然后只需单击一下即可运行。示例
function attachClickListener() {
document.getElementById('myButton').addEventListener('click', function() {
console.log('Button clicked!');
});
}
// Calling the function multiple times
attachClickListener();
attachClickListener();
attachClickListener();
// Clicking the button will log 'Button clicked!' three times
只需在代码末尾添加
PageChange();