js 重写系统confirm方法,不改变使用方式。
发布网友
发布时间:2022-04-26 01:45
我来回答
共2个回答
热心网友
时间:2022-04-07 07:45
1、confirm属于特殊的模态窗口,执行这些语句会阻塞浏览器 Javascript 代码的运行。也就是说,在这句中
var a = confirm( "OK?" ) ;
执行了 confirm( "OK?" ) 弹出一个确认框后,javascript 就不再执行,等到点完按钮、返回一个值后,才能完成赋值语句的执行。
想要模拟这个功能,除非能弹出另外一个模态窗口,否则只用 普通的蒙版和 div 层是做不到阻塞 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 );
利用这种方式,就解决了确认对话框的返回值接收的问题:
热心网友
时间:2022-04-07 09:03
这是当然的了。纯粹使用JS实现,不想改变使用方式是不可能的。JS执行环境是单线程的,除了alert、confirm以及prompt,你根本没办法阻塞脚本执行线程!不论你如何重写confirm,调用了confirm,等窗口弹出来时,confirm下面所有语句就马上运行了,根本不可能等到你按确定后再执行。这样你只能通过回调函数的方式实现。当然你可以用ActiveX实现,不过肯定不通用。
另外,重写原生的JS对象和方法,是一件极其危险的事情,特别是当你使用了其他库的时候。