两次尝试后触发Javascript

Posted

技术标签:

【中文标题】两次尝试后触发Javascript【英文标题】:Javascript firing after two attempts 【发布时间】:2022-01-08 02:41:07 【问题描述】:

好吧,也许标题措辞有点错误......

我有一些 javascript 应该在单击按钮后打开我的侧边栏 - 但需要两次单击才能打开侧边栏,再单击两次才能关闭..

我通过我的 Javascript 了解为什么会发生这种情况 - 但不确定补救措施(不确定它是否真的是 Blazor 问题?)

Javascript

function LoadContent() 

    document.addEventListener("DOMContentLoaded",
        document.onclick = function(event) 

            const showNavbar = (toggleId, navId, pId, headerId) => 
                const toggle = document.getElementById(toggleId),
                    nav = document.getElementById(navId),
                    bodypd = document.getElementById(pId),
                    headerpd = document.getElementById(headerId);
                    mainbodypd = document.getElementById("mainbody");
                

                if (toggle && nav && bodypd && headerpd && mainbodypd) 
                    toggle.addEventListener("click",
                        () => 
                            nav.classList.toggle("show");
                            toggle.classList.toggle("bx-x");
                            bodypd.classList.toggle("body-pd");
                            headerpd.classList.toggle("body-pd");
                            mainbodypd.classList.toggle("height-100short");

                        );
                
            ;

            showNavbar("header-toggle", "nav-bar", "body-pd", "header");

            const linkColor = document.querySelectorAll(".nav_link");

            function colorLink() 
                if (linkColor) 
                    linkColor.forEach(l => l.classList.remove("active"));
                    this.classList.add("active");
                
            

            linkColor.forEach(l => l.addEventListener("click", colorLink));

        );
   

谁能解释一下,我该如何防止这种情况发生(对不起,我对 JS 还很陌生)

【问题讨论】:

您在点击处理程序内部分配了点击处理程序。因此,只需单击一下即可分配它们。也许你根本不需要外部的“document.onclick”处理程序。 小错字 mainbodypd 未定义 blazor 的全部想法不就是你不使用 javascript 吗? "Blazor 允许您使用 C#而不是 JavaScript 构建交互式 Web UI。" 正如其他人所说:删除 document.onclick = function(event) 这样它就不会在每次单击文档时都在加载时运行 如果我拿走那部分 - 我只是不断收到异常 - 找不到“LoadContent”(“LoadContent”未定义)。 【参考方案1】:

那你为什么要这样做:

document.onclick = function(event) 

这使得函数触发每个页面点击页面上的任何地方(意味着您每次点击时都会继续添加事件侦听器)。

您可能应该删除该部分,或者如果您需要它来做某事,请将显示的avbar 部分从中取出,然后将其放在 DOMContentLoaded 中

【讨论】:

以上是关于两次尝试后触发Javascript的主要内容,如果未能解决你的问题,请参考以下文章

附件提醒后 OnSend 触发两次

Javascript fetch 调用后端两次 [重复]

Firebase 存储 API 触发两次

单击相同的绘图标记两次不会触发事件两次

PresentationButton 没有触发两次动作

单击时触发两次 HTML 按钮