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之类的 只能特定位置写特定的 想写一个公用的模拟效果是不可能的