【问题标题】:How to change the style of alert box?如何更改警报框的样式?
【发布时间】:2015-08-17 04:21:06
【问题描述】:

我需要在 alert 框中更改“确定”按钮的样式。

<head>
    <script type="text/javascript">
        function show_alert() {
            alert("Hello! I am an alert box!");
        }
    </script>
</head>
<body>
    <input type="button" onclick="show_alert()" value="Show alert box" />
</body>

【问题讨论】:

  • 你不能。您必须创建自己的。例如,jQuery UI 对话框:jqueryui.it/demos/dialog
  • 请不要使用警告框。有更好的选择。只需将它们用于调试。
  • lmao @EdHeal,请不要将它们用于调试! xD 有更好的选择 xD
  • 我从无聊的事情开始无聊xD codepen.io/anon/pen/tFhKu
  • 拒绝接受 jQuery 作为“答案”。正确的答案是提倡尝试标准化 CSS 规范中的某些内容。

标签: javascript css


【解决方案1】:

警告框是一个系统对象,不受 CSS 约束。要实现这种风格,您需要创建一个 HTML 元素并模仿 alert() 功能。 jQuery UI 对话为你做了很多工作,基本上就像我描述的那样工作:Link.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Dialog - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#dialog" ).dialog();
  } );
  </script>
</head>
<body>
 
<div id="dialog" title="Basic dialog">
  <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
</div>
 
 
</body>
</html>

【讨论】:

  • 小心,因为 jQueryUI 模态框不会暂停 Jquery 代码执行等待用户点击(就像警报一样)。
  • 一个很好的处理方法是在你的事件处理程序中包含 event.preventDefault()。
  • 可以使用纯js创建警报stackoverflow.com/a/30498126/4696809
【解决方案2】:

我使用 SweetAlert 太棒了,您将获得很多自定义选项以及所有回调

swal("Here's a message!", "It's pretty, isn't it?");

【讨论】:

  • 我们可以在纯 javascript 和 HTML 中使用它吗?
  • sweetalert 有太多问题 + 上次发布是 2 年前,检查 sweetalert 2 - sweetalert2.github.io
【解决方案3】:

我尝试使用 java-scriptalert() 框样式使用脚本。这里我使用了那些 JS 和 CSS。

参考这个编码 JS 功能。

var ALERT_TITLE = "Oops!";
var ALERT_BUTTON_TEXT = "Ok";

if(document.getElementById) {
    window.alert = function(txt) {
        createCustomAlert(txt);
    }
}

function createCustomAlert(txt) {
    d = document;

    if(d.getElementById("modalContainer")) return;

    mObj = d.getElementsByTagName("body")[0].appendChild(d.createElement("div"));
    mObj.id = "modalContainer";
    mObj.style.height = d.documentElement.scrollHeight + "px";

    alertObj = mObj.appendChild(d.createElement("div"));
    alertObj.id = "alertBox";
    if(d.all && !window.opera) alertObj.style.top = document.documentElement.scrollTop + "px";
    alertObj.style.left = (d.documentElement.scrollWidth - alertObj.offsetWidth)/2 + "px";
    alertObj.style.visiblity="visible";

    h1 = alertObj.appendChild(d.createElement("h1"));
    h1.appendChild(d.createTextNode(ALERT_TITLE));

    msg = alertObj.appendChild(d.createElement("p"));
    //msg.appendChild(d.createTextNode(txt));
    msg.innerHTML = txt;

    btn = alertObj.appendChild(d.createElement("a"));
    btn.id = "closeBtn";
    btn.appendChild(d.createTextNode(ALERT_BUTTON_TEXT));
    btn.href = "#";
    btn.focus();
    btn.onclick = function() { removeCustomAlert();return false; }

    alertObj.style.display = "block";

}

function removeCustomAlert() {
    document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}

CSS 用于 alert()

#modalContainer {
    background-color:rgba(0, 0, 0, 0.3);
    position:absolute;
    width:100%;
    height:100%;
    top:0px;
    left:0px;
    z-index:10000;
    background-image:url(tp.png); /* required by MSIE to prevent actions on lower z-index elements */
}

#alertBox {
    position:relative;
    width:300px;
    min-height:100px;
    margin-top:50px;
    border:1px solid #666;
    background-color:#fff;
    background-repeat:no-repeat;
    background-position:20px 30px;
}

#modalContainer > #alertBox {
    position:fixed;
}

#alertBox h1 {
    margin:0;
    font:bold 0.9em verdana,arial;
    background-color:#3073BB;
    color:#FFF;
    border-bottom:1px solid #000;
    padding:2px 0 2px 5px;
}

#alertBox p {
    font:0.7em verdana,arial;
    height:50px;
    padding-left:5px;
    margin-left:55px;
}

#alertBox #closeBtn {
    display:block;
    position:relative;
    margin:5px auto;
    padding:7px;
    border:0 none;
    width:70px;
    font:0.7em verdana,arial;
    text-transform:uppercase;
    text-align:center;
    color:#FFF;
    background-color:#357EBD;
    border-radius: 3px;
    text-decoration:none;
}

/* unrelated styles */

#mContainer {
    position:relative;
    width:600px;
    margin:auto;
    padding:5px;
    border-top:2px solid #000;
    border-bottom:2px solid #000;
    font:0.7em verdana,arial;
}

h1,h2 {
    margin:0;
    padding:4px;
    font:bold 1.5em verdana;
    border-bottom:1px solid #000;
}

code {
    font-size:1.2em;
    color:#069;
}

#credits {
    position:relative;
    margin:25px auto 0px auto;
    width:350px; 
    font:0.7em verdana;
    border-top:1px solid #000;
    border-bottom:1px solid #000;
    height:90px;
    padding-top:4px;
}

#credits img {
    float:left;
    margin:5px 10px 5px 0px;
    border:1px solid #000000;
    width:80px;
    height:79px;
}

.important {
    background-color:#F5FCC8;
    padding:2px;
}

code span {
    color:green;
}

HTML文件:

<input type="button" value = "Test the alert" onclick="alert('Alert this pages');" />

还可以查看此DEMO: JSFIDDLE 和演示结果图像

【讨论】:

  • 但这是自定义警报,而不是原始浏览器警报框的样式。有什么诀窍吗,我们还是不见了?
  • 答案中的自定义警报与本机警报不兼容。本机警报和提示是阻塞等待的。
  • 我怎样才能使它成为确认框?
【解决方案4】:

不可能。如果要自定义对话框的视觉外观,则需要使用基于 JS 的解决方案,例如 jQuery.UI dialog

【讨论】:

    【解决方案5】:

    Option1.你可以使用AlertifyJS,这对警报有好处

    选项2。你刚开始或刚加入一个基于web应用程序的项目,界面设计可能不错。否则这应该改变。为了 Web 2.0 应用程序,您将使用动态内容、许多效果和其他东西。所有这些都很好,但没有人考虑过设计 JavaScript 警报和确认框的样式。 这是他们的方式

    创建简单的 js 文件名 jsConfirmStyle.js。这是简单的js代码

    ie5=(document.getElementById&&document.all&&document.styleSheets)?1:0;
    nn6=(document.getElementById&&!document.all)?1:0;
    
    xConfirmStart=800;
    yConfirmStart=100;
    
    if(ie5||nn6) {
    if(ie5) cs=2,th=30;
    else cs=0,th=20;
    document.write(
        "<div id='jsconfirm'>"+
            "<table>"+
                "<tr><td id='jsconfirmtitle'></td></tr>"+
                "<tr><td id='jsconfirmcontent'></td></tr>"+
                "<tr><td id='jsconfirmbuttons'>"+
                    "<input id='jsconfirmleft' type='button' value='' onclick='leftJsConfirm()' onfocus='if(this.blur)this.blur()'>"+
                    "&nbsp;&nbsp;"+
                    "<input id='jsconfirmright' type='button' value='' onclick='rightJsConfirm()' onfocus='if(this.blur)this.blur()'>"+
                "</td></tr>"+
            "</table>"+
        "</div>"
    );
     }
    
               document.write("<div id='jsconfirmfade'></div>");
    
    
    function leftJsConfirm() {
    document.getElementById('jsconfirm').style.top=-1000;
    document.location.href=leftJsConfirmUri;
    }
    function rightJsConfirm() {
    document.getElementById('jsconfirm').style.top=-1000;
    document.location.href=rightJsConfirmUri;
    }
    function confirmAlternative() {
    if(confirm("Scipt requieres a better browser!"))       document.location.href="http://www.mozilla.org";
     }
    
    leftJsConfirmUri = '';
    rightJsConfirmUri = '';
    
    /**
     * Show the message/confirm box
    */
    function showConfirm(confirmtitle,confirmcontent,confirmlefttext,confirmlefturi,confirmrighttext,confirmrighturi)  {
    document.getElementById("jsconfirmtitle").innerHTML=confirmtitle;
    document.getElementById("jsconfirmcontent").innerHTML=confirmcontent;
    document.getElementById("jsconfirmleft").value=confirmlefttext;
    document.getElementById("jsconfirmright").value=confirmrighttext;
    leftJsConfirmUri=confirmlefturi;
    rightJsConfirmUri=confirmrighturi;
    xConfirm=xConfirmStart, yConfirm=yConfirmStart;
    if(ie5) {
        document.getElementById("jsconfirm").style.left='25%';
        document.getElementById("jsconfirm").style.top='35%';
    }
    else if(nn6) {
        document.getElementById("jsconfirm").style.top='25%';
        document.getElementById("jsconfirm").style.left='35%';
    }
    else confirmAlternative();
    }
    

    创建简单的html文件

    <html>
    <head>
    <title>jsConfirmSyle</title>
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <script type="text/javascript" src="jsConfirmStyle.js"></script>
    <script type="text/javascript">
    
     function confirmation() {
     var answer = confirm("Wanna visit google?")
     if (answer){
        window.location = "http://www.google.com/";
    }
    }
      </script>
       <style type="text/css">
        body {
      background-color: white;
       font-family: sans-serif;
      }
    #jsconfirm {
    border-color: #c0c0c0;
    border-width: 2px 4px 4px 2px;
    left: 0;
    margin: 0;
    padding: 0;
    position: absolute;
    top: -1000px;
    z-index: 100;
    }
    
    #jsconfirm table {
    background-color: #fff;
    border: 2px groove #c0c0c0;
    height: 150px;
    width: 300px;
    }
    
    #jsconfirmtitle {
    background-color: #B0B0B0;
    font-weight: bold;
    height: 20px;
    text-align: center;
    }
    
    #jsconfirmbuttons {
    height: 50px;
    text-align: center;
    }
    
    #jsconfirmbuttons input {
    background-color: #E9E9CF;
    color: #000000;
    font-weight: bold;
    width: 125px;
    height: 33px;
    padding-left: 20px;
    }
    
    #jsconfirmleft{
    background-image: url(left.png);
    }
    
    #jsconfirmright{
    background-image: url(right.png);
    }
    </style>
    

     <p>
    <a href="#"  onclick="javascript:showConfirm('Please confirm','Are you really sure to visit google?','Yes','http://www.google.com','No','#')">JsConfirmStyled</a> </p>
    <p><a href="#" onclick="confirmation()">standard</a></p>
    
    
    </body>
     </html>
    

    【讨论】:

      【解决方案6】:

      您需要像这样创建自己的警报框:

      function jAlert(text, customokay){
      	document.getElementById('jAlert_content').innerHTML = text;
          document.getElementById('jAlert_ok').innerHTML = customokay;
          document.body.style.backgroundColor = "gray";
          document.body.style.cursor="wait";
      }
      
      
      
      jAlert("Stop! Stop!", "<b>Okay!</b>");
      #jAlert_table, #jAlert_th, #jAlert_td{
          border: 2px solid blue;
          background-color:lightblue;
          border-collapse: collapse;
          width=100px;
      }
      
      #jAlert_th, #jAlert_td{
          padding:5px;
          padding-right:10px;
          padding-left:10px;
      }
      
      #jAlert{
          /* Position fixed */
          position:fixed;
          /* Center it! */
          top: 50%;
          left: 50%;
          margin-top: -50px;
          margin-left: -100px;
      }
      <p>TEXT</p>
      <div id="jAlRem">
          <div id="jAlert">
              <table id="jAlert_table">
                  <tr id="jAlert_tr">
                      <td id="jAlert_td">  <p id="jAlert_content"></p>  </td>
                      <td id="jAlert_td">  <button id='jAlert_ok'  onclick="jAlertagree()"></button>  </td>
                  </tr>
              </table>
          </div>
      </div>
      
      
      
      
      
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      <p>TEXT</p>
      
      
      <script>
      function jAlertagree(){
          var parent = document.getElementById('jAlRem');
          var child = document.getElementById('jAlert');
          parent.removeChild(child);
          document.body.style.backgroundColor="white";
          document.body.style.cursor="default";
      }
      </script>

      js部分获取HTML中的元素创建警告框,然后在用户点击ok后将其删除。

      您可以使用jAlert("Custom Text", "Ok!"); 调用警报

      【讨论】:

      • +1 不错的开始示例,将 width=100px; 编辑为 width:100px; 并使用类而不是 id,#jAlert_th 从未使用过,
      • @a55 是的,所有有效积分。我必须承认,我写这篇文章大约是在五年前,当时我还是 Web 开发的新手。
      【解决方案7】:

      一种选择是使用altertify,这会提供一个漂亮的警报框。

      只需包含来自here 的所需库,并使用以下代码显示警告框。

      alertify.confirm("This is a confirm dialog.",
        function(){
          alertify.success('Ok');
        },
        function(){
          alertify.error('Cancel');
        });
      

      输出将如下所示。在这里查看它的实际效果是demo

      【讨论】:

        【解决方案8】:

        我知道这是一篇较旧的帖子,但今天早上我正在寻找类似的东西。 在查看了其他一些解决方案后,我觉得我的解决方案要简单得多。 One thing is that I use font awesome in the anchor tag.

        当用户单击事件时,我想在我的日历上显示一个事件。所以我编写了一个单独的&lt;div&gt; 标签,如下所示:

        <div id="eventContent" class="eventContent" style="display: none; border: 1px solid #005eb8; position: absolute; background: #fcf8e3; width: 30%; opacity: 1.0; padding: 4px; color: #005eb8; z-index: 2000; line-height: 1.1em;">
                <a style="float: right;"><i class="fa fa-times closeEvent" aria-hidden="true"></i></a><br />
                Event: <span id="eventTitle" class="eventTitle"></span><br />
                Start: <span id="startTime" class="startTime"></span><br />
                End: <span id="endTime" class="endTime"></span><br /><br />
        </div>
        

        我发现在我的 jquery 中使用类名更容易,因为我使用的是 asp.net。

        Below is the jquery for my fullcalendar app.

        <script>
            $(document).ready(function() {
                $('#calendar').fullCalendar({
                    googleCalendarApiKey: 'APIkey',
                    header: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'month,agendaWeek,agendaDay'
                    },
                    events: {
                        googleCalendarId: '@group.calendar.google.com'
                    },
                    eventClick: function (calEvent, jsEvent, view) {
                        var stime = calEvent.start.format('MM/DD/YYYY, h:mm a');
                        var etime = calEvent.end.format('MM/DD/YYYY, h:mm a');
                        var eTitle = calEvent.title;
                        var xpos = jsEvent.pageX;
                        var ypos = jsEvent.pageY;
                        $(".eventTitle").html(eTitle);
                        $(".startTime").html(stime);
                        $(".endTime").html(etime);
                        $(".eventContent").css('display', 'block');
                        $(".eventContent").css('left', '25%');
                        $(".eventContent").css('top', '30%');
                        return false;
                    }
                });
                $(".eventContent").click(function() {
                    $(".eventContent").css('display', 'none');
                });
            });
        </script>
        

        您必须拥有自己的谷歌日历 ID 和 API 密钥。

        我希望这在您需要简单的弹出式显示时有所帮助。

        【讨论】:

        • 迟到回答问题没有错。保持最新的答案很重要。
        【解决方案9】:

        <head>
          
        
        <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
          <script src="//code.jquery.com/jquery-1.10.2.js"></script>
          <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
          
            <script type="text/javascript">
          
        
        $(function() {
            $( "#dialog" ).dialog({
              autoOpen: false,
              show: {
                effect: "blind",
                duration: 1000
              },
              hide: {
                effect: "explode",
                duration: 1000
              }
            });
         
            $( "#opener" ).click(function() {
              $( "#dialog" ).dialog( "open" );
            });
          });
            </script>
        </head>
        <body>
           <div id="dialog" title="Basic dialog">
           <p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
          </div>
         
          <button id="opener">Open Dialog</button>
        
        </body>

        【讨论】:

          【解决方案10】:

          我使用sweetalert2 库。它真的很简单,有很多自定义,现代的动画窗口,引人注目,而且设计也很好。

          Swal.fire({
            icon: 'error',
            title: 'Oops...',
            text: 'Something went wrong!',
            footer: '<a href>Why do I have this issue?</a>'
          })
          

          查看link

          【讨论】:

            【解决方案11】:

            样式alert()-boxes 是不可能的。您可以改用 javascript 模态覆盖。

            【讨论】:

              【解决方案12】:

              我认为您无法更改浏览器默认警报框的样式。

              您需要创建自己的库或使用简单且可自定义的库,例如 xdialog。以下是自定义警报框的示例。更多demo可以看here

              function show_alert() {
                  xdialog.alert("Hello! I am an alert box!");
              }
              <head>
                  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/xxjapp/xdialog@3/xdialog.min.css"/>
                  <script src="https://cdn.jsdelivr.net/gh/xxjapp/xdialog@3/xdialog.min.js"></script>
                  
                  <style>
                      .xd-content .xd-body .xd-body-inner {
                          max-height: unset;
                      }
                      .xd-content .xd-body p {
                          color: #f0f;
                          text-shadow: 0 0 5px rgba(0, 0, 0, 0.75);
                      }
                      .xd-content .xd-button.xd-ok {
                          background: #734caf;
                      }
                  </style>
              </head>
              <body>
                  <input type="button" onclick="show_alert()" value="Show alert box" />
              </body>

              【讨论】:

              • 一件事是警报必须在页面中间。
              • @MuhammadAliDEV 您可以覆盖默认警报效果。您可以打开 https://xxjapp.github.io/xdialog/ 并自己在 F12 控制台中尝试以下行。 xdialog.alert("Hello! I am an alert box!", {effect: 'fade_in_and_scale'});
              【解决方案13】:

              我使用 AlertifyJS 来设置我的对话样式。

              alertify.alert('Ready!');
              alertify.YoutubeDialog || alertify.dialog('YoutubeDialog',function(){
                  var iframe;
                  return {
                      // dialog constructor function, this will be called when the user calls alertify.YoutubeDialog(videoId)
                      main:function(videoId){
                          //set the videoId setting and return current instance for chaining.
                          return this.set({ 
                              'videoId': videoId
                          });
                      },
                      // we only want to override two options (padding and overflow).
                      setup:function(){
                          return {
                              options:{
                                  //disable both padding and overflow control.
                                  padding : !1,
                                  overflow: !1,
                              }
                          };
                      },
                      // This will be called once the DOM is ready and will never be invoked again.
                      // Here we create the iframe to embed the video.
                      build:function(){           
                          // create the iframe element
                          iframe = document.createElement('iframe');
                          iframe.frameBorder = "no";
                          iframe.width = "100%";
                          iframe.height = "100%";
                          // add it to the dialog
                          this.elements.content.appendChild(iframe);
              
                          //give the dialog initial height (half the screen height).
                          this.elements.body.style.minHeight = screen.height * .5 + 'px';
                      },
                      // dialog custom settings
                      settings:{
                          videoId:undefined
                      },
                      // listen and respond to changes in dialog settings.
                      settingUpdated:function(key, oldValue, newValue){
                          switch(key){
                             case 'videoId':
                                  iframe.src = "https://www.youtube.com/embed/" + newValue + "?enablejsapi=1";
                              break;   
                          }
                      },
                      // listen to internal dialog events.
                      hooks:{
                          // triggered when the dialog is closed, this is seperate from user defined onclose
                          onclose: function(){
                              iframe.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}','*');
                          },
                          // triggered when a dialog option gets update.
                          // warning! this will not be triggered for settings updates.
                          onupdate: function(option,oldValue, newValue){
                              switch(option){
                                  case 'resizable':
                                      if(newValue){
                                          this.elements.content.removeAttribute('style');
                                          iframe && iframe.removeAttribute('style');
                                      }else{
                                          this.elements.content.style.minHeight = 'inherit';
                                          iframe && (iframe.style.minHeight = 'inherit');
                                      }
                                  break;    
                              }    
                          }
                      }
                  };
              });
              //show the dialog
              alertify.YoutubeDialog('GODhPuM5cEE').set({frameless:true});
              <!-- JavaScript -->
              <script src="//cdn.jsdelivr.net/npm/alertifyjs@1.13.1/build/alertify.min.js"></script>
              <!-- CSS -->
              <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.13.1/build/css/alertify.min.css"/>
              <!-- Default theme -->
              <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.13.1/build/css/themes/default.min.css"/>
              <!-- Default theme -->
              <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.13.1/build/css/themes/default.rtl.min.css"/>

              【讨论】:

                猜你喜欢
                • 2020-09-04
                • 2016-04-05
                • 1970-01-01
                • 1970-01-01
                • 2012-09-15
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多