使用自定义的确认框代替默认的浏览器的确认框
2015-08-24 22:59
543 查看
经常在项目使用到浏览器默认的确认框,可惜默认的确认框无法自定义样式,但是通过使用if(confirm("确定吗"))来获取返回值并进行下一步的操作有时十分必要。那么,如何自定义一个类似的能返回布尔值的函数呢?
一开始的想法是写个弹出框函数,能通过捕捉相应的点击确认和取消事件来返回true or false。however,事实是函数的执行就会一个返回true值,所以无论点击了弹出框什么按钮都返回true,无法模拟默认的浏览器确认框。
尝试使用回调函数的方法,实测可行。
关键代码如下:
简单写了下样式:
弹出框效果如下图,样式较简单粗犷,不用太吐槽:
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZ0AAAEFCAIAAAC3iK3bAAAPv0lEQVR4nO3dS2/a6B6Acc92PhIfiDUTCVXZZTNSD5o0NN3EM1KrZDNhwSJSRSbKahJlwSJBU50cwbG8oK3V4sPlcDC3EJKz4Gbs18bptAX+PL9FBMaXNwsevTYm0R4fHx8eHh4eHobD4WAw6Pf7nU7HcZxms1mv16vVqm3bFQBYGbZtV6vVer3ebDYdx+l0Ov1+fzAYDIfDUc20UddGUev1eo7jNBoN27YtyyqXy6ZpGoZRKpWKALACSqWSYRimaZbLZcuybNtuNBqO4/R6vWnaNHfUWq3Wp0+fzs7ODg8PdQBYSYeHh6enp+/evbu9vTVN07KsWq3WarWmaRt3rd/vO47z6dOno6OjQqHQarUeAWAltVqtQqFwdHSUz+evr6+LxeKHDx9qtZrjOP1+fzgcaqPJWqfTaTQaZ2dnhUJh2WMGgMUKhcIff/xxfn6ez+eLxaJlWY1Go9PpDAYDbTpZs2379evX7XZ72aMFgMUcx3nz5k0mkzk/P7++vjZN07bt0ZRNGw6HvV6v2WxalqXr+rKHCgBR6bp+cHCQzWYvLi5ub28ty2o2m71eT7u/v+92u/V6vVwu0zUAa0TX9VQqdXh4eHZ2dnNzUy6X6/V6t9vVBoNBu92uVqumadI1AGtE1/WdnR1d109OTvL5vGma1Wq13W6Pu2bbtmEYdA3AGtF1fXt7e39/P5vNXl1dGYZh2/asa5VKpVQq0TUAa0TX9WQyube3l8lkLi8vS6VSpVIZd81xnEqlUiwW6RqANaLr+tbW1u7u7vHx8Z9//lksFiuViuM42t3dHV0DsI5GXfvll19+//13ugZAAl3Xf/rpJ7oGQI5v1bVcXNM0TdPiuadt8LT1I689d5BY2gh40f9KyLBGLz11CAC+uW/UNSMde1qmomxhpGPT18e9mYbIU6xJVifiOcVC99Emh/cOIFrXFHtWHAPA9/H1uhb63va+yWcZWcjbqvk9jF9VVXG0bLJk9Gyys/mtHz1jcu3lKV0jYMBq+OpdC3pzj6sxX6XwEnjPGpVh0+K5sKyNtva+HnR4Ix3znIqqz1w9DY/FIvw2AL6Xdeqat065+OSx6tizOZSRjk3SEzYfjDQG9S80OZZqzkrtgO9tSV37QgHHCM7aNEhGOjZ+5jo9nS509Wh+3yFX/dwH9ZyHcloKLNWSrq9FW9lfGu/HBY+P6mtl8xfwYmkjvGuuLdRd803Ypvuna8DKWZ35WrQJnT9syuNOV8uN0/WFXZv21zMs5ece8Zyi1+GnuQC+gaV2be5cMeKJqmcGpd5qkhdP15TCujbbaj5P3vNW5mvAKllm177gowTXgbR4Luxzza8yXwu67paLa1o8HnifB10DlmpJ19dcW3juvQiYTYUcSt2PXHyua+OnUbo2+5h1cuUuFtN8RZ58+EnXgJWzxPma56tWT/rAdK5swe37gq65Yjk9TZ6/p/fx8fHRMIxHf9fSyjTTN+A7W17XZmmau3c2SgUmnwrM7kkL/GLn+NVc8Pcb/F1TjEc1A+P7BsCKWlrX3PMp95X9RXFQz/ICqqO6drZovqa+01cxOroGrKilfj/U/cWBqNuo+hEYt/nX3fOwWY4mXXM9Ud4RF/C1rsXfe6d3wHe2nPnaU//IUODtsaqVlDs20rH5pMY9f0jJSMcmu5/LneJ3nLu3mGgBK4e/KwlAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQJqoXYsDwJpgvgZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAauiZWLh5LG4qlmhbPLWE4wPdD18Qy0jFVwQIWf60jaqqYhm8StIWRjqleCvkFwvaGTULXBMvFle/yXDwwbLm4FiosiEY6FrKSd8/xnHsT9QGMdEyxt2hd8+96JiB96sNhHdE1ycbv8+i1CjtLDZ/o5eLjHYWf6LqbOp9d9VwrF/dlKHrXntgouiYHXZMtZG4WsPqXzNfmT0AVLfIPx5O/4Az5Jp3KVX3TwTRd22R0bXMpZlZfMl/Lxf2nduq0zfaQi2vxXGBEw9vypPma6hiBu+czFTHomkzT97N6ehSw6MnztdFVrMnSuZpNT0w9K892NJuJueZko1HNVo10auo+gPo8NFKy6JoYdE2wuff2fIIC6vCU+Zpnh6p9zrVt+mSyo5Cuzbb3jdF/2PlXxtWkaxuNrgnmO2ObnjKGXAKLRrkD5cLxVavxTNDTtQWzQlXXcnEtFlPdAGKkY7FYTIul0/HZ9TXFx6LBvzddE4OuCaa6EjV5oys+ZIwsqAyhHxjE0rnxcIxZcp4+XzPSMS2eVtzZlouPYjbKdiweZ762weiaYKquzSZJ6nfw3DYBN8AFWTALNP5G14x0Oud62XfL7mhB8H0eJGuz0DXBvF0bNS2WNibzs0UX2FRniiHhelrXgj+j8HZt7srcLIXzv5rn9dFB1McgcOLRNcFmXVOdfY6X+S/Afcv52iwt7pVD5mvuYfteU51k/837cvkalgh0TazZlXr/LRfudbzfNnBN5b7NeejksbKf7kPOffTpv2vWXza6hhG6JtPkk8/o79X5KIXfyBYQjOifsnqSNIrZ5JjuW1Pc3/ZU3+jr/dZChO+HciIqHl2TyUjHIzZqelb492cqf/vukZD9ht1VNzcLZMIFugZAHroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAGroGQBq6BkAaugZAmqhdiwPAmmC+BkAaugZAmsCu/fDDD6Ou/fjjj3QNwBqhawCkWXweStcArBfmawCk4XMDANLQNQDS0DUA0tA1ANLQNQDS0LXN8urVq2fPniWW6tmzZ69evVr9UWF90bUN8o9U6uXLl58/f75fqs+fP798+fIfqdQqjwprja5tkGQyadv23d3d/5bq7u7Otu1kMrnKo8Jao2sbJJFI3N/fLzcfI/f394lEYpVHhbVG1zZIIpEYDAbNb0bTtIhrDgYDd9e+YFQLjxV9MMpRYa3RtQ0yKsh/Q2k+IWsufBDE37XoowpaEjLCiOiaGHRtg4wK0lhE0zT3A3dBFq7pXhjC37WFm/gPp3wcLvqosNbo2gZJJBJ3d3e1RTRNUz6YPl244UJ3d3furkUZlXL/niXhA1g4PPeosNbo2gYZFaS6iHuCM10y/ele4l/fs2EQf9eijCrkiAs3j4KuiUHXNsioIP9ZRNM05YPp06DV/C8F8XctyqhG/ONxPwgXfVRYa3RtgyQSiU6nYy7iDsF0yfRn+PqeDYN0Oh131xaOarrP6c8oh1s4jJBRYa3RtQ0yKoixiKZpygfTp0Hrhyzx8Hct4qj8P/2HC1q+EF0Tg65tkFFB/r2IpmnTB+7HQWsq52vhh/B3LeKogo4YMv6IQ/KMCmuNrm2QRCLRbreLoTwtcC/3r7nwpSDtdtvdtYWjcg9suv+gAYQMLPqosNbo2gYZFeRfkWma5n4wfRryOGiJh79rEQfj/6kcjH/AUdA1MejaBkkkEo7j/DMyTdOmP91LlKu5nypXc3Mcx921LxiV8nCeofpFHxXWGl3bIKOCvFsB/q4te0Tv3s2PCmuNrm2QRCLRarX+WgGtVsvdtRUcFdYaXdsgyWTy/fv31Wq1sFTVavX9+/fuv7+2gqPCWqNrGySVSu3t7X38+LG1VB8/ftzb20tN/jLtao4Ka42ubZbnz58nk8mv8x8BvlQymXz+/Pnqjwrri64BkIauAZBG1/WtrS26BkCOUdd2d3ePj4/nujYYDNrtdqVSKZVKdA3AGtF1PZlMvnjxIpPJXF5elkqlSqXSbrfHXbNt2zCM169ft9vtZQ8VABZrt9tv3rzZ3t7e39/PZrNXV1eGYdi2PetatVo1TfP09LRQKCx7tACwWKFQePv27c7Ojq7rJycn+XzeNM1qtdput7X7+/tut1uv18vl8l9//XV0dFQoFLrd7rLHDABq3W63UCgcHR399ttvqVTq8PDw7Ozs5uamXC7X6/Vut6sNh8Ner9dsNi3Lur29zefzp6enr1+/1gFgJb158+bt27e//vrrzz//fHBwkM1mLy4ubm9vLctqNpu9Xk8bDof9ft9xHNu2TdO8vr4+Pz/PZDIHBwepVGpnZ2d7ezuZTG5tbW1tbf0EAEsyqlAymdze3t7Z2UmlUgcHB5lM5vz8/Pr62jRN27Ydx+n3+9pwOBwMBp1Op9FoWJZVLBbz+fz5+Xk2mz08PNR1fX9//8WLF7u7u78AwFLt7u6+ePFif39f1/XDw8NsNnt+fp7P54vFomVZjUaj0+kMBgPt4eFhOmWr1WofPnwoFovX19cXFxdnZ2cnJyfZbDaTyRwfH/8OAEt1fHycyWSy2ezJycnZ2dnFxcX19XWxWPzw4UOtVhtN1obD4bhrg8Gg1+u1Wq1arWZZlmmat7e3Nzc3+Xz+6urq8vLyTwBYAZeXl1dXV/l8/ubm5vb21jRNy7JqtVqr1er1eoPBYDgcao+Pj+60OY7TaDRs27Ysq1wum6ZpGEapVHrS348HgG+kVCoZhmGaZrlctizLtu1Go+E4zjRqDw8P465N09bv9zudjuM4zWazXq9Xq1XbtisAsDJs265Wq/V6vdlsOo7T6XT6/f40auOuudM2rVuv1+t2u+0JBwBWwDRK3W631+tNizaN2uPj4/8BVnpyksrr/PcAAAAASUVORK5CYII=)
点击确认后会执行回调函数alert('你点击了确认'), 点击取消后会执行回调函数alert('你点击了取消'),就不截图了。
同样的,要想实现alert弹出框也是类似的思路,回调callback_OK();则可。
总之,成功实现自定义确认框,若有更好的方法,请诸位不吝赐教。
-----------------------原创,转载请把本文链接附上 http://www.cnblogs.com/suspiderweb/
一开始的想法是写个弹出框函数,能通过捕捉相应的点击确认和取消事件来返回true or false。however,事实是函数的执行就会一个返回true值,所以无论点击了弹出框什么按钮都返回true,无法模拟默认的浏览器确认框。
尝试使用回调函数的方法,实测可行。
关键代码如下:
<script> /** * @param content : 确认框中的内容 * @param callback_CANCEL : 点击取消的回调函数 * @param callback_OK : 点击确认的回调函数 */ function showConfirm(content,callback_CANCEL,callback_OK){ var confirm_modal = document.createElement('article'); confirm_modal.setAttribute('id', 'alert-confirm'); confirm_modal.innerHTML='<header>自定义确认框</header><div class="confirm-content">' + content + '</div><footer><button id="confirm-cancel" >取消</button><button id="confirm-yes">确定</button></footer>'; document.body.appendChild(confirm_modal); //点击取消 document.getElementById("confirm-cancel").onclick=function(){ document.getElementById('alert-confirm').remove(); if(callback_CANCEL && typeof callback_CANCEL== "function") callback_CANCEL( false ); }; //点击确认 document.getElementById('confirm-yes').onclick=function(){ document.getElementById('alert-confirm').remove(); if(callback_OK && typeof callback_OK == "function") callback_OK( true ); }; } //点击弹出确认框 document.getElementById("confirm").onclick=function(){showConfirm("这是个确认框!",function(){alert("你点击了取消")},function(){alert('你点击了确认')})}; </script>
简单写了下样式:
<style type="text/css"> #alert-confirm{ box-shadow: 2px 2px 5px #333; border:1px solid #999; border-radius:4px; position: absolute; top:50%; left:50%; margin-left:-200px; margin-top:-125px; width:400px; height:250px; background: #FFF; } header{ box-sizing:border-box; height:40px; width:100%; line-height: 40px; padding:0 10px; font-size:16px; font-weight:bolder; display: block; border-bottom: 1px solid #666; } .confirm-content{ line-height: 170px; text-align: center; height:170px; } footer{ box-sizing:border-box; height:40px; width:100%; line-height: 40px; font-size:16px; font-weight:bolder; display: block; border-top: 1px solid #666; text-align: center; } </style>
弹出框效果如下图,样式较简单粗犷,不用太吐槽:
点击确认后会执行回调函数alert('你点击了确认'), 点击取消后会执行回调函数alert('你点击了取消'),就不截图了。
同样的,要想实现alert弹出框也是类似的思路,回调callback_OK();则可。
总之,成功实现自定义确认框,若有更好的方法,请诸位不吝赐教。
-----------------------原创,转载请把本文链接附上 http://www.cnblogs.com/suspiderweb/
相关文章推荐
- ajax文本空输入显示用户信息
- 当我们讲故事时,我们在做营销
- 当我们讲故事时,我们在做营销
- 95后营销:4个问题和4个要领
- ACM_SKILLS(Update)
- uva 1292 树形dp
- hdu 1281 棋盘游戏(最大匹配·匈牙利)
- 重构---代码的坏味道
- Struts2: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]
- Set a static file on django
- nide.js(二)文件I/O
- 第一百四十四天 how can I 坚持
- 消息队列
- C++栈学习——顺序栈和链栈的区别
- WCF实战2
- android入门(四) 调试工具DDMS的使用
- QDialog例程
- poj 3678 Katu Puzzle (2-sat)
- Linux shell 内部变量
- Unity的3D遮罩技术简述