js 重写系统confirm方法,不改变使用方式。
无法阻断线程,进入方法后,自定义方法就执行完毕了。点击确定无法拿到true。无法执行后续方法。...
无法阻断线程,进入方法后,自定义方法就执行完毕了。点击确定 无法拿到 true。无法执行后续方法。
展开
2个回答
推荐于2017-10-15 · 知道合伙人数码行家
关注
展开全部
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 );
利用这种方式,就解决了确认对话框的返回值接收的问题:
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 );
利用这种方式,就解决了确认对话框的返回值接收的问题:
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是当然的了。纯粹使用JS实现,不想改变使用方式是不可能的。JS执行环境是单线程的,除了alert、confirm以及prompt,你根本没办法阻塞脚本执行线程!不论你如何重写confirm,调用了confirm,等窗口弹出来时,confirm下面所有语句就马上运行了,根本不可能等到你按确定后再执行。这样你只能通过回调函数的方式实现。当然你可以用ActiveX实现,不过肯定不通用。
另外,重写原生的JS对象和方法,是一件极其危险的事情,特别是当你使用了其他库的时候。
另外,重写原生的JS对象和方法,是一件极其危险的事情,特别是当你使用了其他库的时候。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询