gpt4 book ai didi

javascript - 无法读取jsni中null的属性removeChild

转载 作者:行者123 更新时间:2023-11-28 07:16:40 25 4
gpt4 key购买 nike

我正在研究gwt。我编写了一段代码来显示一个弹出窗口,这个弹出窗口发生得非常好,它会在 5 秒后自动运行,如果有人单击弹出窗口,那么它将一直停留到用户单击弹出窗口外部(单击 html 正文)。

整个功能工作正常,但消失后出现错误

错误是

Uncaught TypeError: Cannot read property 'removeChild' of null

public static void popupError(){

var sr,sm,mb1;

sr=$doc.getElementById('errorpopup');
sr.innerHTML="";

sm=$doc.createElement("div");
sm.className="greyout";
sm.setAttribute("style","margin-bottom: 10px;");

mb1=$doc.createElement("div");
mb1.className="mob-maskbody";

var rightside = $doc.createElement("div");
rightside.className="pad10";

var errortext= $doc.createElement("div");
errortext.className="nh6 center bold";
errortext.innerHTML=error;

rightside.appendChild(errortext);

mb1.appendChild(rightside);

sm.appendChild(mb1);
sr.appendChild(sm);

fadding();

$doc.body.onclick = function()
{
fadding();
}

function fadding()
{
if(sr.childNodes[0]!=null || sm!=null)
{
var hideFadeTimer;
var hideDelayTimer;

hideFadeTimer = setTimeout(function()
{
if(sm!=null){
sm.className="greydout";
}
},2500);

hideDelayTimer = setTimeout(function()
{
if(sm!=null){
sm.parentNode.removeChild(sm);

hideFadeTimer = null;
hideDelayTimer = null;
$doc.body.onclick = null;
}
},5000);

sm.onclick = function(event)
{
event.stopPropagation();

if(hideDelayTimer)
{
clearTimeout(hideDelayTimer);
}
if(hideFadeTimer)
{
clearTimeout(hideFadeTimer);
}
sm.className="greyout";
}
}
}
}

最佳答案

如果您在弹出窗口外部单击两次,则 hideDelayTimer会被调用两次,第二次sm将没有父节点。

你每次检查是否sm为 null,但您从未将其设置为 null;这可能是这里的问题:将其从其父节点中删除后将其设置为 null(不过我相信您可以在事件处理方面做得更好)。

关于javascript - 无法读取jsni中null的属性removeChild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30772028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com