js重写confirm 如何实现,自己写了个只是模拟出了效果,但是只要一调用就会返回false,求助 10

点击确认和取消,返回值一直都是false,functionConfirm(msg){btnok.onclick=function(){returntrue}btncanc... 点击确认和取消,返回值一直都是false,
function Confirm(msg) {
btnok.onclick=function(){return true}
btncancel.onclick=function(){return false}
return false;}
展开
 我来答
myrealword
推荐于2017-05-21 · TA获得超过306个赞
知道小有建树答主
回答量:227
采纳率:100%
帮助的人:169万
展开全部

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 则相反。


这只是一个思路。

lswuzeru
2014-11-12 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:104
采纳率:100%
帮助的人:87.3万
展开全部
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();

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
麦克格雷兜
2014-11-12 · TA获得超过143个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:89.1万
展开全部
js基本不能模拟这种效果的 还有alert之类的 只能特定位置写特定的 想写一个公用的模拟效果是不可能的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式