js中confirm提示三个按钮“是”“否”“取消”

  重载DOM中confirm

  window.confirm = function(str) {  
  str=str.replace(/\'/g,  "'&chr(39)&'").replace(/\r\n|\n|\r/g,  "'&VBCrLf&'");  
    execScript("n  =  msgbox('"+  str  +"',  3,  '提示')",  "vbscript");  
    return(n);  
  }

  // 调用

  function send(){

  var v = confirm("提示?\u000d 是(Y):是\u000d 否(N):否");
  if (v=='6') {
   alert('是'); 

  } else if(v=='7') {
  alert('否'); 

  } else {
  alert('取消'); 

  }
}

--------------

<script language=vbscript>
function go()
go=msgbox ("haha",3)
end function
</script>
<script language=javascript>
var a=go()
if(a==6)
{
alert("您按的是‘是’")
}
if(a==7)
{
alert("您按的是‘否’")
}
if(a==2)
{
alert("您按的是‘取消’")
}
</script>

-------------

我们之所以弹出这个对话框,可能就是因为该操作很危险,所以要用户确认。但如果默认选择"确定",则可能违背了这个原则。
另外,confirm对话框的按钮都是固定在"确定"和"取消"这两个。可能有些时候也不是很直观。

所以,可以考虑用vbscript中的msgbox来改写这个行为。下面是一个范例

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script>
function deleteConfirm(msg)
{
function window.confirm(str)
{
str= str.replace(/\'/g, "'& chr(39) &'").replace(/\r\n/g, "'& VBCrLf &'");
execScript("n = msgbox('"+ str +"', 289, '删除框')", "vbscript");
return(n == 1);
}
return window.confirm(msg);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="deleteButton" runat="server" OnClientClick="javascript:return deleteConfirm('你确定要删除吗?')" Text="删除"
onclick="deleteButton_Click" />
</div>
</form>
</body>
</html>

关于msgbox 方法的具体细节,还可以参考下面的介绍

MsgBox 函数

在对话框中显示消息,等待用户单击按钮,并返回一个值指示用户单击的按钮。
MsgBox(prompt[, buttons][, title][,
helpfile, context])
参数
prompt
作为消息显示在对话框中的字符串表达式。prompt 的最大长度大约是
1024 个字符,这取决于所使用的字符的宽度。如果 prompt 中包含多个行,则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10))
或回车换行符的组合 (Chr(13) & Chr(10)) 分隔各行。
Buttons

数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,默认按钮的标识以及消息框样式的数值的总和。有关数值,请参阅“设置”部分。如果省略,则buttons
的默认值为 0。
Title
显示在对话框标题栏中的字符串表达式。如果省略 title,则将应用程序的名称显示在标题栏中。

Helpfile
字符串表达式,用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供helpfile,则必须提供 context。在 16
位系统平台上不可用。
Context
数值表达式,用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供 context,则必须提供
helpfile。在 16 位系统平台上不可用。
设置
buttons 参数可以有以下值:

常数 描述
vbOKOnly 0 只显示确定按钮。
vbOKCancel 1 显示确定取消按钮。
vbAbortRetryIgnore 2 显示放弃重试忽略按钮。
vbYesNoCancel 3 显示取消按钮。
vbYesNo 4 显示按钮。
vbRetryCancel 5 显示重试取消按钮。
vbCritical 16 显示临界信息图标。
vbQuestion 32 显示警告查询图标。
vbExclamation 48 显示警告消息图标。
vbInformation 64 显示信息消息图标。
vbDefaultButton1 0 第一个按钮为默认按钮。
vbDefaultButton2 256 第二个按钮为默认按钮。
vbDefaultButton3 512 第三个按钮为默认按钮。
vbDefaultButton4 768 第四个按钮为默认按钮。
vbApplicationModal 0 应用程序模式:用户必须响应消息框才能继续在当前应用程序中工作。
vbSystemModal 4096 系统模式:在用户响应消息框前,所有应用程序都被挂起。

第一组值 (0 - 5)
用于描述对话框中显示的按钮类型与数目;第二组值 (16, 32, 48, 64) 用于描述图标的样式;第三组值 (0, 256, 512)
用于确定默认按钮;而第四组值 (0, 4096) 则决定消息框的样式。在将这些数字相加以生成 buttons 参数值时,只能从每组值中取用一个数字。

返回值
MsgBox 函数有以下返回值:

常数 按钮
vbOK 1 确定
vbCancel 2 取消
vbAbort 3 放弃
vbRetry 4 重试
vbIgnore 5 忽略
vbYes 6
vbNo 7

说明
如果同时提供了
helpfile 和 context,则用户可以按 F1 键以查看与上下文相对应的帮助主题。

如果对话框显示取消按钮,则按 ESC
键与单击取消的效果相同。如果对话框包含帮助按钮,则有为对话框提供的上下文相关帮助。但是在单击其他按钮之前,不会返回任何值。

当MicroSoft
Internet Explorer使用MsgBox函数时,任何对话框的标题总是包含"VBScript",以便于将其与标准对话框区别开来。

下面的例子演示了 MsgBox 函数的用法:

Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
' MyVar contains either 1 or 2, depending on which button is clicked

-------------------------

相信很多人都受够了 alert、confirm 的样子,最近正在用 bootstrap 做项目,顺便封装了一个 bootstrap 样式的消息框。

实现起来很简单,bootstrap 本身就自带了 modal 模态框,样子还不错 :)就把它封装一下用吧。

无码无真相,少说多做,上代码。

项目是Asp.net Mvc架构的,方便全局调用,我直接在全局 Layout 页面加上以下HTML:

<!-- system modal start -->
<div id="ycf-alert" class="modal">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h5 class="modal-title"><i class="fa fa-exclamation-circle"></i> [Title]</h5>
</div>
<div class="modal-body small">
<p>[Message]</p>
</div>
<div class="modal-footer" >
<button type="button" class="btn btn-primary ok" data-dismiss="modal">[BtnOk]</button>
<button type="button" class="btn btn-default cancel" data-dismiss="modal">[BtnCancel]</button>
</div>
</div>
</div>
</div>
<!-- system modal end -->

不多说了,都是bootstrap modal的样式,不熟悉的朋友可以查查 bootstrap css ,中括号[....]的内容会最终替换为我们传入的参数显示。

js 封装如下:

;
$(function () {
window.Modal = function () {
var reg = new RegExp("\\[([^\\[\\]]*?)\\]", 'igm');
var alr = $("#ycf-alert");
var ahtml = alr.html();

//关闭时恢复 modal html 原样,供下次调用时 replace 用
//var _init = function () {
// alr.on("hidden.bs.modal", function (e) {
// $(this).html(ahtml);
// });
//}();

/* html 复原不在 _init() 里面做了,重复调用时会有问题,直接在 _alert/_confirm 里面做 */

var _alert = function (options) {
alr.html(ahtml); // 复原
alr.find('.ok').removeClass('btn-success').addClass('btn-primary');
alr.find('.cancel').hide();
_dialog(options);

return {
on: function (callback) {
if (callback && callback instanceof Function) {
alr.find('.ok').click(function () { callback(true) });
}
}
};
};

var _confirm = function (options) {
alr.html(ahtml); // 复原
alr.find('.ok').removeClass('btn-primary').addClass('btn-success');
alr.find('.cancel').show();
_dialog(options);

return {
on: function (callback) {
if (callback && callback instanceof Function) {
alr.find('.ok').click(function () { callback(true) });
alr.find('.cancel').click(function () { callback(false) });
}
}
};
};

var _dialog = function (options) {
var ops = {
msg: "提示内容",
title: "操作提示",
btnok: "确定",
btncl: "取消"
};

$.extend(ops, options);

console.log(alr);

var html = alr.html().replace(reg, function (node, key) {
return {
Title: ops.title,
Message: ops.msg,
BtnOk: ops.btnok,
BtnCancel: ops.btncl
}[key];
});

alr.html(html);
alr.modal({
width: 500,
backdrop: 'static'
});
}

return {
alert: _alert,
confirm: _confirm
}

}();
});

调用方法:

// 四个选项都是可选参数
Modal.alert(
{
msg: '内容',
title: '标题',
btnok: '确定',
btncl:'取消'
});

// 如需增加回调函数,后面直接加 .on( function(e){} );
// 点击“确定” e: true
// 点击“取消” e: false
Modal.confirm(
{
msg: "是否删除角色?"
})
.on( function (e) {
alert("返回结果:" + e);
});

js中confirm揭示三个按钮“是”“否”“取消”的更多相关文章

  1. [转]js中confirm实现执行操作前弹出确认框的方法

    原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...

  2. js中addEventListener第三个参数涉及到的事件捕获与冒泡

    js中,我们可以给一个dom对象添加监听事件,函数就是 addEventListener("click",function(){},true); 很容易理解,第一个参数是事件类型, ...

  3. JS中 confirm()方法的使用?

    confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框. 如果用户点击确定按钮,则 confirm() 返回 true.如果点击取消按钮,则 confirm() 返回 false ...

  4. 关于原生js中函数的三种角色和jQuery源码解析

    原生js中的函数有三种角色: 分两大种: 1.函数(最主要的角色)2.普通对象(辅助角色):函数也可以像对象一样设置属于本身的私有属性和方法,这些东西和实例或者私有变量没有关系两种角色直接没有必然的关 ...

  5. JS中 confirm() 方法

    前言 环境: window 10,google 浏览器 测试代码 <html> <!-- 测试确定框,如果点 "是" ,则返回 true,这样就触发 a 标签的 ...

  6. JS 中 原生方法 (三) --- Date 日期

    本文也说主要阐释了 Javascript 中的基础类型和 引用类型的自带方法,那么熟悉的同学又可以绕道了 总是绕道,真是羞耻悳boy 当然 本文阐述的主要类容 from MDN ( zh-cn ) D ...

  7. ----关于JS中迭代的三个“FOR”----

    for each...in 使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行. 一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的index ...

  8. JS中confirm弹出框

    if(confirm("确定要删除该任务吗?")){ $.post("findTaskById.action",{taskId:taskId},function ...

  9. JS中confirm,prompt用法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 实现Promise的first等各种变体

    本篇文章主要是想通过ES6中Promise提供的几个方法,来实现诸如first.last.none.any等各种变体方法! 在标准的ES6规范中,提供了Promise.all和Promise.race ...

  2. Stretch的Uniform和UniformToFill

    通俗理解Stretch的Uniform和UniformToFill: Uniform,控件的高度和宽度会增加直到达到了容器的大小,也就是说控件的大小和容器的大小是有关系的,同时如果给控件设置了明确的高 ...

  3. ubuntu 14.04 如何安装nvidia显卡驱动 [转载]

    我的机子装的是64位ubuntu 14.04 LTS系统,显卡是GeForce 405 ,想使用cuda所以需要装NVidia官方驱动,但是总是碰到 nouveau 驱动正在使用的问题.找了好久,网上 ...

  4. Java Web中Kaptcha实现验证码

    首先进行导入相应的jar包: 1.如果是maven项目,在你的pom文件中进行添加如下代码,将自动下载jar包到你的工程中: <dependency>            <gro ...

  5. 024——VUE中filter的使用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. C++复习13.虚析构函数知识

    C++ 虚析构函数 20131010 在C++中的虚函数作用是实现基于继承机制的多态,但是我们好像忽略了一种情况,就是虚析构函数.在C++继承机制中,虽然构造函数是不可以使用虚函数声明,但是析构函数是 ...

  7. C# ASP.NET 验证码

    使用C# ASP.NET 获取 验证码的代码书写 一般都采用异步 点击 前台验证码图片 请求一次 : 前台图片代码: <img id="imgvalidatecode" sr ...

  8. RabbitMQ(4) 未路由的消息、TTL和死信

    未路由的消息 当生产这发送的消息到达指定的交换器后,如果交换器无法根据自身类型.绑定的队列以及消息的路由键找到匹配的队列,默认情况下消息将被丢弃.可以通过两种方式 处理这种情况,一是在发送是设置man ...

  9. 【LeetCode 88_数组】Merge Sorted Array

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { ; ; ; &&a ...

  10. vscode 实用插件

    1.Auto Rename Tag,非常实用!要修改标签名称的时候自动修改结束标签,节省一半时间,提升效率,非常棒! 2.vscode-icon,这款必须要推荐,明显提升效率的小插件,在项目文件多类型 ...