弹出提示窗口JS怎么设置弹出一次,假设多弹出也要把前者取消,让后者弹出一次?



这个问题可以看到有两次叠加的现象,弹出提示窗口JS怎么设置弹出一次,假设多弹出也要把前者取消,让后者弹出一次?

function prompt(text,bgcolor) {
    var sbid = document.getElementsByTagName("body")[0];
    var newDiv = document.createElement("div");
    newDiv.className="dialog";
    newDiv.className +=" "+bgcolor;
    newDiv.innerHTML += "<p>"+text+"</p>";
    sbid.appendChild(newDiv);
    setTimeout(function(){
        sbid.removeChild(newDiv);
    },4000);
}

给你看看这段代码:

function hello(){      

alert("hello");

}

var id=window.setTimeout(hello,5000);

document.onclick=function(){     

window.clearTimeout(id);

 }

function prompt(text,bgcolor){

var sbid = document.getElementsByTagName("body")[0];
var newDiv = document.createElement("div");
newDiv.className="dialog";
newDiv.className +=" "+bgcolor;
newDiv.id="dialog";
newDiv.innerHTML += "<p>"+text+"</p>";
sbid.appendChild(newDiv);
if(document.getElementById("dialog")){
    document.getElementById("dialog").onclick = function(){
        this.parentNode.removeChild(document.getElementById("dialog"));
    }
}

}


弹出弹窗前,先把弹窗内容区域清空,然后再把内容填充进弹窗内容区


立个flag.

var flag = true;
if(flag) {
    flag = false;
    prompt(...);
}
function prompt(text,bgcolor) {
    clearTimeout(timer);
    var sbid = document.getElementsByTagName("body")[0];
    var newDiv = document.createElement("div");
    newDiv.className="dialog";
    newDiv.className +=" "+bgcolor;
    newDiv.innerHTML += "<p>"+text+"</p>";
    sbid.appendChild(newDiv);
    var timer = setTimeout(function(){
        sbid.removeChild(newDiv);
        flag = true;   //  在这儿还原flag
    },4000);
}

试试


每次弹出的时候都清空一下。然后再渲染

var newDiv;
function prompt(text,bgcolor) {
    if(newDiv == null){
        var sbid = document.getElementsByTagName("body")[0];
        newDiv = document.createElement("div");
        newDiv.className="dialog";
        newDiv.className +=" "+bgcolor;
        newDiv.innerHTML += "<p>"+text+"</p>";
        sbid.appendChild(newDiv);
        setTimeout(function(){
            newDiv.parentNode.removeChild(newDiv);
            newDiv = null;
        },4000);
    }else{
        newDiv.parentNode.removeChild(newDiv);
        newDiv = null;
        prompt(text,bgcolor);
    }
}

function prompt(text,bgcolor) {
    var sbid = document.getElementsByTagName("body")[0];
    var alert = document.querySelectorAll('.dialog');//得到Dialog列表
    if(alert.length>0){
        sdid.removeChild(alert[0]);
        //如果有多个可以遍历删除
        //但是加了这个,基本上就只有单个了
    }else{
        var newDiv = document.createElement("div");
        newDiv.className="dialog";
        newDiv.className +=" "+bgcolor;
        newDiv.innerHTML += "<p>"+text+"</p>";
        sbid.appendChild(newDiv);
        setTimeout(function(){
            sbid.removeChild(newDiv);
        },4000);
    }
    
}



相关阅读:
前端如何掌握必须的http知识?
在pfsense中启动barnyard2失败
scrapy怎么设置返回码不是200换代理
为什么有的公司要求DBA禁止使用between?
Laravel 如何获取路由名称?
前后端分离中碰到跨域问题大家是怎么解决的?
阮一峰老师《ECMAScript 6入门》第一节中的疑问
定时器中this为什么会指向window
backbone排序问题,视图实时排序
vuex中的state值,在工具类模块中怎么获取?
怎样用yii2.0配合mongodb做后台的权限控制系统???
类方法里实现网络请求类单例的方法有些情况返回不了数据
mysql如何合并两张结构相同的数据表?
easyui1.5 datagrid中分页显示不正常,求教各位
API Gateway 或者 OpenAPI设计思想?
vue.js实现组件间的上移下移
新人小白问题之 什么时候需要用到form标签?什么时候不必用,用不用有什么区别?
Git出错 Fatal:multiple Stage Entriesfor Merged File
前端怎么实现关闭页面或浏览器后,重新打开页面或重启浏览器,可以继续原来的操作,比如重新打开后不需要重新调用后台的服务
flask 中的 template_rendered 函数



快速导航

Copyright © 2016 phpStudy |