本来想模仿winapi里的messagebox
但可惜js 不支持 阻塞模式
返回值只能用异步了。
支持 ff ie opera
doctype 可以申明 也可以不申明
存在问题
在opera 里图层不能透明
对于页面内有iframe的也无法使用
在ie里无法遮住select的
复制代码 代码如下:
nbsp;html public -//w3c//dtd xhtml 1.0 transitional//en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd>
messagebox演示
' +
'' +
'
' +
'
' +
'
' +
'
';
var timer = null;
document.write(mb_str);
var icon = new image();
icon.src = mb_icon;
/* 提示对话框
* 参数 1 : 提示内容
* 参数 2 : 提示标题
* 参数 3 : 图标路径
* 参数 4 : 按钮类型
*/
function messagebox(){
var _content = arguments[0] || 这是一个对话框!;
var _title = arguments[1] || 提示;
var _icon = arguments[2] || mb_icon;
var _button = arguments[3] || mb_ok;
mb_backcall = arguments[4];
var _iconstr = '';
var _btnstr = '';
switch(_button)
{
case mb_cancel : _btnstr = _btnstr.toformatstring(msgboxbtncancel, mb_cancel_text); break;
case mb_yes : _btnstr = _btnstr.toformatstring(msgboxbtnyes, mb_yes_text); break;
case mb_no : _btnstr = _btnstr.toformatstring(msgboxbtnno, mb_no_text); break;
case mb_okcancel :
_btnstr = _btnstr.toformatstring(msgboxbtnok, mb_ok_text) + +
_btnstr.toformatstring(msgboxbtncancel, mb_cancel_text);
break;
case mb_yesno :
_btnstr = _btnstr.toformatstring(msgboxbtnyes, mb_yes_text) + +
_btnstr.toformatstring(msgboxbtnno, mb_no_text);
break;
case mb_yesnocancel :
_btnstr = _btnstr.toformatstring(msgboxbtnyes, mb_yes_text) + +
_btnstr.toformatstring(msgboxbtnno, mb_no_text) + +
_btnstr.toformatstring(msgboxbtncancel, mb_cancel_text);
break;
default : _btnstr = _btnstr.toformatstring(msgboxbtnok, mb_ok_text); break;
}
//解决 ff 下会复位
scrolltop = getbrowserdocument().scrolltop;
scrollleft = getbrowserdocument().scrollleft;
getbrowserdocument().style.overflow = hidden;
getbrowserdocument().scrolltop = scrolltop;
getbrowserdocument().scrollleft = scrollleft;
$(msgboxtitle).innerhtml = _title;
$(msgboxicon).innerhtml = _iconstr.toformatstring(_icon);
$(msgboxcontent).innerhtml = _content;
$(msgboxcontrol).innerhtml = _btnstr;
opacityvalue = 0;
$(msgbox).style.display = ;
try{$(msgboxmask).filters(alpha).opacity = 0;}catch(e){};
$(msgboxmask).style.opacity = 0;
$(msgboxmask).style.display = ;
$(msgboxmask).style.height = getbrowserdocument().scrollheight + px;
$(msgboxmask).style.width = getbrowserdocument().scrollwidth + px;
timer = setinterval(doalpha(),1);
//设置位置
$(msgbox).style.width = 100%;
$(msgbox).style.width = ($(msgboxicon).offsetwidth + $(msgboxcontent).offsetwidth + 2) + px;
$(msgbox).style.margintop = (-$(msgbox).offsetheight/2 + getbrowserdocument().scrolltop) + px;
$(msgbox).style.marginleft = (-$(msgbox).offsetwidth/2 + getbrowserdocument().scrollleft) + px;
if(_button == mb_ok || _button == mb_okcancel){
$(msgboxbtnok).focus();
}else if(_button == mb_yes || _button == mb_yesno || _button == mb_yesnocancel){
$(msgboxbtnyes).focus();
}
}
var opacityvalue = 0;
var scrolltop = 0;
var scrollleft = 0;
function getbrowserdocument()
{
var _dcw = document.documentelement.clientheight;
var _dow = document.documentelement.offsetheight;
var _bcw = document.body.clientheight;
var _bow = document.body.offsetheight;
if(_dcw == 0) return document.body;
if(_dcw == _dow) return document.documentelement;
if(_bcw == _bow && _dcw != 0)
return document.documentelement;
else
return document.body;
}
function setopacity(obj,opacity){
if(opacity >=1 ) opacity = opacity / 100;
try{obj.style.opacity = opacity; }catch(e){}
try{
if(obj.filters){
obj.filters(alpha).opacity = opacity * 100;
}
}catch(e){}
}
function doalpha(){
if (opacityvalue > 20){clearinterval(timer);return 0;}
opacityvalue += 5;
setopacity($(msgboxmask),opacityvalue);
}
function mbmethod(obj)
{
switch(obj.id)
{
case msgboxbtnok : if(mb_backcall) {mb_backcall(mb_ok);} else {if(mb_ok_method) mb_ok_method();} break;
case msgboxbtncancel : if(mb_backcall) {mb_backcall(mb_cancel);} else {if(mb_cancel_method) mb_cancel_method();} break;
case msgboxbtnyes : if(mb_backcall) {mb_backcall(mb_yes);} else {if(mb_yes_method) mb_yes_method();} break;
case msgboxbtnno : if(mb_backcall) {mb_backcall(mb_no);} else {if(mb_no_method) mb_no_method();} break;
}
mb_ok_method = null;
mb_cancel_method = null;
mb_yes_method = null;
mb_no_method = null;
mb_backcall = null;
mb_ok_text = 确定;
mb_cancel_text = 取消;
mb_yes_text = 是 ;
mb_no_text = 否 ;
$(msgbox).style.display = none;
$(msgboxmask).style.display = none;
getbrowserdocument().style.overflow = ;
getbrowserdocument().scrolltop = scrolltop;
getbrowserdocument().scrollleft = scrollleft;
}
string.prototype.toformatstring = function(){
var _str = this;
for(var i = 0; i _str = eval(_str.replace(/\\{+ i +\\}/ig,' + arguments[i] + '));
}
return _str;
}
function $(obj){
return document.getelementbyid(obj);
}
///////////////////////////////////////////////////////////////////////////////////////
普通演示
回调演示一
回调演示二
回调演示三
自定义演示