Ne v kontakte Asocial programmer's blog

Замена стандартным JavaScript диалогам.

Впервые такая мысль мысль пришла в голову, когда я занимался разработкой мода Full AlJAX для phpBB3 Там я старался выдержать все элементы управления в едином стиле и стандартные диалоговые окна казались мне довольно убогими и некрасивыми. Тогда я предпринял пару неубедительных попыток решить эту проблему, но до ума так и не довел.

А сегодня я вдруг вспомнил о той давней идее и решил ее осуществить, тем более, что с тех пор я накопил кое-какую полезную инфу по теме.

Результатом стал набор из трех функций myAlert(), myConfirm() и myPrompt(), которые реализовали функционал стандартных диалогов при помощи слоев и DOM. Благодаря этому внешний вид диалогов можно легко подогнать под любой стиль, используя лишь CSS.

Ниже я привожу пример моего диалога:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<script src="http://nevkontakte.org.ru/files/cooldialog.js.txt"></script>
<style>
  .popup_dialog {
    /* Netscape 4, IE 4.x-5.0/Win and other lesser browsers will use this */
    position: absolute;
    top: 150px;
    left: 0;
    width: 300px;
    background-color: #f6f4d0;
    padding: 10px;
    border: dotted 2px #105289;
    z-index: 100;
    text-align: center;
  }

  body > div.popup_dialog {
    /* used by Opera 5+, Netscape6+/Mozilla, Konqueror, Safari, OmniWeb 4.5+, iCab, ICEbrowser */
    position: fixed;
  }

  div.popup_dialog {
    /* IE5.5+/Win - this is more specific than the IE 5.0 version */
    top: expression(
      (
          150 +
            (
              ignoreMe = document.documentElement.scrollTop ?
                document.documentElement.scrollTop: document.body.scrollTop
            )
        ) + "px"
    );
  }

  .popup_control {
    cursor: pointer;
    cursor: hand;
    font-size: 10px;
  }

  .popup_headerbar {
    text-align: right;
  }

  .popup_buttons {
    margin: 10px 0 0 0;
    text-align: center;
  }

  /*.popup_buttons input {
    float: left;
  }*/

  .popup_content {
    display: block;
    padding: 10px;
  }
</style>
<script>
  function testDlg() {
    myPrompt("Введите ваше имя:", "Алекс", function (result) {
      if (!result) {
        result = "Анонимус";
      }
      alert("Ваше имя:" + result);
    });
  }
</script>

Скачать: dialog.zip