问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js重写confirm 如何实现,自己写了个只是模拟出了效果,但是只要一调用就 ...

发布网友 发布时间:2022-04-26 01:45

我来回答

3个回答

热心网友 时间:2022-04-07 07:44

alert、confirm等都属于特殊的模态窗口,执行这些语句会阻塞浏览器 Javascript 代码的运行。也就是说,在这句中 

var a  = confirm( "OK?" ) ;

执行了 confirm( "OK?" )  弹出一个确认框后,javascript 就不再执行,直到你点完按钮、返回一个值后,才能完成赋值语句的执行。


而你想要模拟这个功能,除非能弹出另外一个模态窗口,否则只用 普通的蒙版和 div 层是做不到阻塞 Javascript 的执行的。


这也是你的代码返回 false 的原因:你的 confirm 在执行饭后,立即就返回了 false ,没等按钮被点击,Javascript 已经完成了赋值语句并继续下面的工作了。


有个建议,把你的方法改成:

function Confirm(msg,callback_OK,callback_CANCEL) { 
    btnok.onclick = function(){
        if(callback_OK && typeof callback_OK == "function")
            callback_OK( true );
        close();//你应该有这个功能吧?
    }
    btncancel.onclick = function(){
        if(callback_CANCEL && typeof callback_CANCEL== "function")
            callback_CANCEL( false );
        close();//你应该有这个功能吧? 
    }
}

这样的话,你如果想执行类似这样的功能:

if(confirm( "OK?" )){
    okHandlerCode();
}else{
    cancelHandlerCode();
}

就可以写成

Confirm( "OK?" , okHandlerCode  , cancelHandlerCode );

利用这种方式,就解决了确认对话框的返回值接收的问题:


参数的语义表达的很清楚,okHandlerCode  内接收和处理确认框为 true 情形,cancelHandlerCode 则相反。


这只是一个思路。

热心网友 时间:2022-04-07 09:02

var con = function(spec,my){
var that = {};

my = my || {};
my.result = false;

that.init = function(){
var confirm = spec.divConfirm;
var ok = spec.btnOK;
var can = spec.btnCancel;

confirm.style.display = 'block';
ok.onclick = function(){
my.result = true;
confirm.style.display = 'none';
spec.ok();
// return result;
}
can.onclick = function(){
my.result = false;
confirm.style.display = 'none';
spec.cancel();
// return result;
}
};

return that;
}

var spec = {
divConfirm:document.querySelector('.confirm'),
btnOK:document.querySelector('.confirm #btnOK'),
btnCancel:document.querySelector('.confirm #btnCan'),
ok:function(){
alert('hello');
},
cancel:function(){
alert('cancel');
}
}
var myCon = con(spec);
myCon.init();

这是我写的方法,你可以试试看

热心网友 时间:2022-04-07 10:37

js基本不能模拟这种效果的 还有alert之类的 只能特定位置写特定的 想写一个公用的模拟效果是不可能的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 一个关于JS confirm 确认框的问题 JS中confirm("")返回的是一个什么值? JS 中confirm怎么点击取消还是删除了数据 js 重写系统confirm方法,不改变使用方式。 JS怎么控制confirm()跳转? 在JS中怎么得到confirm()的返回值? js confirm函数 有好的解决办法吗?要把美团商家后台的订房数据快速填到酒店自己的管理软件吗? 怎么在美团上推广住宿 要怎样才能找到美团酒店商家后台的才务管理 美团酒店商家修改房间名称 美团商家酒店后台订单取消政策在哪里设置? 美团酒店商家后台怎么上传不了首图 美团酒店商家后台提示有虚假交易刷单行为是怎么了是指什么 美团酒店商家后台怎么免费群发短信 美团酒店商家怎么退后台 美团酒店后台商品管理在哪里 安徽省革命老区有哪些? 英山县原先是属于安徽六安,后来为何又划入了湖北黄冈呢? 湖北黄冈市大别山风水宝地在哪里百科 js 中的confirm如何不只有两个button按钮 js中用confirm("str")弹出的消息框怎么设置按钮的文本 js confirm 怎么修改它的按钮 JAVASCRIPT 里的confirm语句的用法 如何用js的confirm做判断 用js(最好jQuery) 重写confirm方法【js高手请进】 到底在哪买恋爱保险? 绩效考核 实际完成比例>=70%;120%封顶什么意思 绩效中的上限与下限是什么意思 请问中小企业绩效考核标准是怎么样的? 工作评分120%。这个是什么意思?如果算绩效考核。120%是最高得吗 质检部员工绩效考核方案 金融业人力资源规划和绩效考核方案,如何写?有范文不? 求一份 文化传播公司的 管理制度 和提成方案 华为nova2怎么这么费电 大学期间英语专业四级可以考几次?是只有两次机会还是不限次数? 如果只有两次的话,我没复习好,但是之前 鲁东大学英语四级考试有次数限制吗 英语四六级考试是不是考试次数不*,还有每个院校考试人数有没有*? 卤料的配制 华为手机护眼模式原来还有这么多用处,现在知道感觉亏大了!