模拟alert和confirm
啥也不說,先上圖,有圖有真相 :)
現(xiàn)在絕大多數(shù)網(wǎng)站都不用自帶的alert和confirm了,因?yàn)榻缑嫣擦?。因此這個(gè)插件就這樣產(chǎn)生了...
來看插件的實(shí)現(xiàn)代碼吧:
(function () {$.MsgBox = {Alert: function (title, msg) {GenerateHtml("alert", title, msg);btnOk(); //alert只是彈出消息,因此沒必要用到回調(diào)函數(shù)callbackbtnNo();},Confirm: function (title, msg, callback) {GenerateHtml("confirm", title, msg);btnOk(callback);btnNo();}}//生成Htmlvar GenerateHtml = function (type, title, msg) {var _html = "";_html += '<div id="mb_box"></div><div id="mb_con"><span id="mb_tit">' + title + '</span>';_html += '<a id="mb_ico">x</a><div id="mb_msg">' + msg + '</div><div id="mb_btnbox">';if (type == "alert") {_html += '<input id="mb_btn_ok" type="button" value="確定" />';}if (type == "confirm") {_html += '<input id="mb_btn_ok" type="button" value="確定" />';_html += '<input id="mb_btn_no" type="button" value="取消" />';}_html += '</div></div>';//必須先將_html添加到body,再設(shè)置Css樣式$("body").append(_html); GenerateCss();}//生成Cssvar GenerateCss = function () {$("#mb_box").css({ width: '100%', height: '100%', zIndex: '99999', position: 'fixed',filter: 'Alpha(opacity=60)', backgroundColor: 'black', top: '0', left: '0', opacity: '0.6'});$("#mb_con").css({ zIndex: '999999', width: '400px', position: 'fixed',backgroundColor: 'White', borderRadius: '15px'});$("#mb_tit").css({ display: 'block', fontSize: '14px', color: '#444', padding: '10px 15px',backgroundColor: '#DDD', borderRadius: '15px 15px 0 0',borderBottom: '3px solid #009BFE', fontWeight: 'bold'});$("#mb_msg").css({ padding: '20px', lineHeight: '20px',borderBottom: '1px dashed #DDD', fontSize: '13px'});$("#mb_ico").css({ display: 'block', position: 'absolute', right: '10px', top: '9px',border: '1px solid Gray', width: '18px', height: '18px', textAlign: 'center',lineHeight: '16px', cursor: 'pointer', borderRadius: '12px', fontFamily: '微軟雅黑'});$("#mb_btnbox").css({ margin: '15px 0 10px 0', textAlign: 'center' });$("#mb_btn_ok,#mb_btn_no").css({ width: '85px', height: '30px', color: 'white', border: 'none' });$("#mb_btn_ok").css({ backgroundColor: '#168bbb' });$("#mb_btn_no").css({ backgroundColor: 'gray', marginLeft: '20px' });//右上角關(guān)閉按鈕hover樣式$("#mb_ico").hover(function () {$(this).css({ backgroundColor: 'Red', color: 'White' });}, function () {$(this).css({ backgroundColor: '#DDD', color: 'black' });});var _widht = document.documentElement.clientWidth; //屏幕寬var _height = document.documentElement.clientHeight; //屏幕高var boxWidth = $("#mb_con").width();var boxHeight = $("#mb_con").height();//讓提示框居中$("#mb_con").css({ top: (_height - boxHeight) / 2 + "px", left: (_widht - boxWidth) / 2 + "px" });}//確定按鈕事件var btnOk = function (callback) {$("#mb_btn_ok").click(function () {$("#mb_box,#mb_con").remove();if (typeof (callback) == 'function') {callback();}});}//取消按鈕事件var btnNo = function () {$("#mb_btn_no,#mb_ico").click(function () {$("#mb_box,#mb_con").remove();});} })();Html代碼結(jié)構(gòu)如下,js里面拼接的不直觀,給出如下:
<div id="mb_box"></div> <div id="mb_con"><span id="mb_tit">title</span><a id="mb_ico">x</a><div id="mb_msg">msg</div><div id="mb_btnbox"><input id="mb_btn_ok" type="button" value="確定" /><input id="mb_btn_no" type="button" value="取消" /></div> </div>mb_box為半透明遮罩層,將整個(gè)頁(yè)面遮住,禁止操作;mb_con為提示框。之所以沒把mb_con放在mb_box里面,是因?yàn)槿绻爬锩娴脑?#xff0c;對(duì)mb_box設(shè)置的透明度會(huì)影響到mb_con,使mb_con也會(huì)變成透明的。之前也試過 font-family: Verdana, Arial, Helvetica, sans-serif;">?
為了使插件使用方便,特意的沒有用到圖片,全是通過css來控制界面效果,使用時(shí),引用一個(gè)js文件就可以了。css樣式在js中寫死了,這點(diǎn)可能不太靈活,但使用卻很方便如果你對(duì)界面樣式不滿意或者與你網(wǎng)站的色彩風(fēng)格不一致,那只能自行修改了。
由于彈出層(div)無法做到像原始的alert和confirm那樣做到頁(yè)面阻塞效果,因此只能通過 回調(diào)函數(shù) 來進(jìn)行模擬。也因?yàn)檫@個(gè)原因,后臺(tái)數(shù)據(jù)操作只能通過回調(diào)函數(shù)配合ajax來完成的。
Demo如下:
<html xmlns="http://www.w3.org/1999/xhtml"> <head><title>模擬alert和confirm提示框</title> </head> <body><input id="add" type="button" value="添加" /><input id="delete" type="button" value="刪除" /><input id="update" type="button" value="修改" /><script src="../js/jquery-1.4.1.min.js" type="text/javascript"></script><script src="../js/jquery.similar.msgbox.js" type="text/javascript"></script><script type="text/javascript">$("#add").bind("click", function () {$.MsgBox.Alert("消息", "哈哈,添加成功!");});//回調(diào)函數(shù)可以直接寫方法function(){}$("#delete").bind("click", function () {$.MsgBox.Confirm("溫馨提示", "執(zhí)行刪除后將無法恢復(fù),確定繼續(xù)嗎?溫馨提示", function () { alert("你居然真的刪除了..."); });});function test() {alert("你點(diǎn)擊了確定,進(jìn)行了修改");}//也可以傳方法名 test$("#update").bind("click", function () {$.MsgBox.Confirm("溫馨提示", "確定要進(jìn)行修改嗎?", test);});//當(dāng)然你也可以不給回調(diào)函數(shù),點(diǎn)擊確定后什么也不做,只是關(guān)閉彈出層//$("#update").bind("click", function () { $.MsgBox.Confirm("溫馨提示", "確定要進(jìn)行修改嗎?"); });
</script> </body> </html> 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的模拟alert和confirm的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孟小蓓(说一说孟小蓓的简介)
- 下一篇: 覆雨翻云国语全集高清电影版(覆雨翻云国语