powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ввод времени. Помогите новичку.
26 сообщений из 26, показаны все 2 страниц
Ввод времени. Помогите новичку.
    #39776593
Petrovna28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь создать поле для ввода времени. Пока это выглядит так.


Код: html
1.
<asp:TextBox ID="timetxt" CssClass="lenta_data"  runat="server"></asp:TextBox>



Код: c#
1.
2.
3.
4.
 protected void Page_Load(object sender, EventArgs e)
        {
            timetxt.Text = DateTime.Now.ToShortTimeString();
        }


Модератор: Учимся использовать тэги оформления кода - FAQ
Мне необходимо, чтобы пользователь мог менять время, но соблюдая формат HH:mm и не вводил ничего лишнего типа "88:25".

К сожалению не могу воспользоваться никаким готовым элементом, например, JQuery. Это ограничение заказчика.

Как мне проще организовать такое поле. Опыта очень мало.(
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776604
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28,

либо самостоятельно код валидации на JavaScript написать, либо взять готовый, типа moment.js
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776607
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776610
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776636
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28,

.. или даже Ajax Control Toolkit Slider , если уж так необходимо сохранить чистоту учения ...
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776684
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28никаким готовым элементом, например, JQueryjs разрешено?
А то странное ограничение)
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776727
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Petrovna28никаким готовым элементом, например, JQueryjs разрешено?
А то странное ограничение)

.. да курсовой проект, небось ... "С JS и дурак сможет, а вот вы попробуйте.." .. :)
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776728
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikа вот вы попробуйте.." .. :)...на css
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776730
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пациенту нужна операция, но он настаивает без анестезии. что ж вперед!
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776870
Petrovna28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

JS можно. Фреймворки нельзя. Не курсовик. Мне достался в наследство большой проект, который надо немного дописать. Опыта мало. Не набрасывайтесь :(
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776878
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28Не набрасывайтесь :(логичные требования - озвучить ВСЕ ограничения, а то люди сначала пытаются помочь, тратят время, а потом выясняется, что есть запреты какие-то.
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776879
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28Фреймворки нельзяэто библиотека. Можно не обзывать фреймворком.
А то как будете например, прибавлять к дате 2 рабочих дня?
Библиотека понадобится.
Зы.
Делайте в js... На ветке форума js.
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776881
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А то как будете например, прибавлять к дате 2 рабочих дня?
Библиотека понадобится.
необязательно
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776890
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Petrovna28Фреймворки нельзяэто библиотека. Можно не обзывать фреймворком.
А то как будете например, прибавлять к дате 2 рабочих дня?
Библиотека понадобится.
Зы.
Делайте в js... На ветке форума js.

.. это же WebForms, там всё можно на сервере накрутить ... а вот клиентскую валидацию - тут да ...

Petrovna28

вот тут почитайте:
User Input Validation in ASP.NET
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776891
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилPetro123А то как будете например, прибавлять к дате 2 рабочих дня?
Библиотека понадобится.
необязательнопо китайскому календарю?))
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776897
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Изопропилпропущено...

необязательнопо китайскому календарю?))
Если мы будем предполагать невозможное, тогда Вы ошиблись адресом(с)
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39776912
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
Да)). Тогда слово необязательно это согласие)
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777016
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28JS можно
Тогда (у нас же только время и только HH:mm) можно начать с этого:
Код: html
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.
<input onkeydown="onTimeInputKeyDown(this)" maxlength="5" type="text" />
<script>
function onTimeInputKeyDown(sender, e) {
    e = e || window.event;
    
    switch (e.keyCode) {
        case 8:   // backspace
        case 9:   // tab
        case 13:  // enter
        case 16:  // shift
        case 17:  // ctrl
        case 18:  // alt
        case 20:  // caps lock
        case 27:  // escape
        case 32:  // space
        case 35:  // end
        case 36:  // home
        case 37:  // left arrow
        case 39:  // right arrow
        case 45:  // insert
        case 46:  // delete
            return true;
    }
    
    if (e.keyCode > 8 && (e.keyCode < 48 || 57 < e.keyCode) && (e.keyCode < 96 || 105 < e.keyCode)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        return false;
    }
    
    if (sender.value.length == 2) {
        sender.value += ':';
    }
    
    return true;
}
</script>
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777031
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в лоб допилить:

Код: javascript
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.
<input onkeydown="onTimeInputKeyDown(this)" maxlength="5" style="text-align:center;width:50px" type="text" />
<script>
function onTimeInputKeyDown(sender, e) {
    e = e || window.event;
    
    // Allow following key codes
    switch (e.keyCode) {
        case 8:   // backspace
        case 9:   // tab
        case 13:  // enter
        case 16:  // shift
        case 17:  // ctrl
        case 18:  // alt
        case 20:  // caps lock
        case 27:  // escape
        case 32:  // space
        case 35:  // end
        case 36:  // home
        case 37:  // left arrow
        case 39:  // right arrow
        case 45:  // insert
        case 46:  // delete
            return true;
    }
    
    // The first number in hours should be less than 3.
    if (sender.value.length == 0
    && (e.keyCode < 48 || 50 < e.keyCode) && (e.keyCode < 96 || 98 < e.keyCode)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        return false;
    }
    
    // The second number in hours depends on the first. When the last one is 2 then it should be less than 4.
    if (sender.value.length == 1 && +sender.value == 2
    && (e.keyCode < 48 || 51 < e.keyCode) && (e.keyCode < 96 || 99 < e.keyCode)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        return false;
    }
    
    // The first number in minutes should be less than 6.
    if (sender.value.length == 2
    && (e.keyCode < 48 || 55 < e.keyCode) && (e.keyCode < 96 || 101 < e.keyCode)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        return false;
    }
    
    if (e.keyCode > 8 && (e.keyCode < 48 || 57 < e.keyCode) && (e.keyCode < 96 || 105 < e.keyCode)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        return false;
    }
    
    if (sender.value.length == 2) {
        sender.value += ':';
    }
    
    return true;
}
</script>
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777034
Petrovna28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух, большое Вам спасибо!
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777047
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28, да не за что.

По хорошему надо проверять selectionStart, а не value.length.
Иначе можно ввести 23:59, удалить 2 и ввести 8 :)

Код: javascript
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.
<input onkeydown="onTimeInputKeyDown(this)" maxlength="5" style="text-align:center;width:50px" type="text" />
<script>
function onTimeInputKeyDown(sender, e) {
    e = e || window.event;
    
    // Allow following key codes
    switch (e.keyCode) {
        case 8:   // backspace
        case 9:   // tab
        case 13:  // enter
        case 16:  // shift
        case 17:  // ctrl
        case 18:  // alt
        case 20:  // caps lock
        case 27:  // escape
        case 35:  // end
        case 36:  // home
        case 37:  // left arrow
        case 39:  // right arrow
        case 45:  // insert
        case 46:  // delete
            return true;
    }
    
    var start = sender.selectionStart;
    
    // The first number in hours should be less than 3.
    if (start === 0 && (e.keyCode < 48 || 50 < e.keyCode) && (e.keyCode < 96 || 98 < e.keyCode)) {
        e.preventDefault();
        return false;
    }
    
    // The second number in hours depends on the first. When the last one is 2 then it should be less than 4.
    if (start === 1 && +sender.value[0] === 2 && (e.keyCode < 48 || 51 < e.keyCode) && (e.keyCode < 96 || 99 < e.keyCode)) {
        e.preventDefault();
        return false;
    }
    
    // The first number in minutes should be less than 6.
    if ((start === 2 || start === 3) && (e.keyCode < 48 || 53 < e.keyCode) && (e.keyCode < 96 || 101 < e.keyCode)) {
        e.preventDefault();
        return false;
    }
    
    if ((e.keyCode < 48 || 57 < e.keyCode) && (e.keyCode < 96 || 105 < e.keyCode)) {
        e.preventDefault();
        return false;
    }
    
    if (sender.value.length === 2) {
        sender.value += ':';
    }
    
    return true;
}
</script>


Надеюсь вам не надо поддерживать IE8 и меньше?
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777095
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и конечно избавиться от дублирования кода и засунуть всё в отдельный тип:

Код: html
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.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
<style>
  input.time {
    text-align: center;
    width: 50px;
  }
</style>
<label>From <input class="time" id="time_from" type="text" /></label>
<label> to <input class="time" id="time_to" type="text" /></label>
<script>
  (function (window) {
    function timeBox(elementId) {
      var element = document.getElementById(elementId);
        
      if (element) {
        element.addEventListener('keydown', onKeyDown);
      }
        
      function onKeyDown(e) {        
        e = e || window.event;
        var sender = e.target;
    
        // Allow following key codes
        switch (e.keyCode) {
          case 8:   // backspace
          case 9:   // tab
          case 13:  // enter
          case 16:  // shift
          case 17:  // ctrl
          case 18:  // alt
          case 20:  // caps lock
          case 27:  // escape
          case 35:  // end
          case 36:  // home
          case 37:  // left arrow
          case 39:  // right arrow
          case 45:  // insert
          case 46:  // delete
            return true;
        }
    
        // Suppress input if the symbol is not a valid number according it's position in HH:mm
        if (timeBox.outOfBound(e.keyCode, timeBox.maxByIndex(sender.selectionStart, sender.value))) {
          e.preventDefault();
          return false;
        }
    
        if (sender.value.length === 2) {
          sender.value += ':';
        }

        // Suppress input if the value reached the length of HH:mm
        if (sender.value.length === 'HH:mm'.length) {
          e.preventDefault();
          return false;
        }
    
        return true;
      }
    }
    
    timeBox.maxByIndex = function(index, value) {
      switch (index) {
        // The first number in hours should be less than 3.
        case 0:
          return 2;
        // The second number in hours depends on the first. When the last one is 2 then it should be less than 4.
        case 1:
          return +value[index - 1] === 2 ? 3 : 9;
        // The first number in minutes should be less than 6.
        case 2:
        case 3:
          return 5;
      }
    
      return 9;
    }

    timeBox.outOfBound = function(key, max) {
      return (key < 48 || 48 + max < key) && (key < 96 || 96 + max < key);
    }
    
    window.timeBox = timeBox;
  }(window));

  timeBox('time_from');
  timeBox('time_to');
</script>



...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777148
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и поправить баги:

Код: html
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.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
<style>
  input.time {
    text-align: center;
    width: 50px;
  }
</style>
<label>From <input class="time" id="time_from" type="text" /></label>
<label> to <input class="time" id="time_to" type="text" /></label>
<script>
  (function (window) {
    function timeBox(elementId) {
      var element = document.getElementById(elementId);
        
      if (element) {
        element.addEventListener('keydown', onKeyDown);
        element.setAttribute('maxlength', 'HH:mm'.length);
      }
        
      function onKeyDown(e) {        
        e = e || window.event;
        var sender = e.target;
    
        // Allow following key codes
        switch (e.keyCode) {
          case 8:   // backspace
          case 9:   // tab
          case 13:  // enter
          case 16:  // shift
          case 17:  // ctrl
          case 18:  // alt
          case 20:  // caps lock
          case 27:  // escape
          case 35:  // end
          case 36:  // home
          case 37:  // left arrow
          case 39:  // right arrow
          case 46:  // delete
            return true;
        }
    
        // Suppress input if the symbol is not a valid number according it's position in HH:mm
        if (timeBox.outOfBound(e.keyCode, timeBox.maxByIndex(sender.selectionStart, sender.value))) {
          e.preventDefault();
          return false;
        }
    
        if (sender.value.length === 2) {
          sender.value += ':';
        }
    
        return true;
      }
    }
    
    timeBox.maxByIndex = function(index, value) {
      switch (index) {
        // The first number in hours should be less than 3.
        case 0:
          return 2;
        // The second number in hours depends on the first. When the last one is 2 then it should be less than 4.
        case 1:
          return +value[index - 1] === 2 ? 3 : 9;
        // The first number in minutes should be less than 6.
        case 2:
        case 3:
          return 5;
      }
    
      return 9;
    }

    timeBox.outOfBound = function(key, max) {
      return (key < 48 || 48 + max < key) && (key < 96 || 96 + max < key);
    }
    
    window.timeBox = timeBox;
  }(window));

  timeBox('time_from');
  timeBox('time_to');
</script>


...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777776
Petrovna28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот еще такую штуку нашла
Код: plaintext
1.
2.
3.
<asp:RegularExpressionValidator runat="server" ControlToValidate="timetxt"
                     ValidationExpression="^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$" ErrorMessage="Время в формате чч:мм">
                </asp:RegularExpressionValidator> 



Оно работает, только двоеточие надо руками писать. Но это уже мелочи жизни :)

Internet Explorer к сожалению только и нужен и да, не самых последних версий :(
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777824
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28,
Молодец.
...
Рейтинг: 0 / 0
Ввод времени. Помогите новичку.
    #39777925
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrovna28Я вот еще такую штуку нашла
[SRC asp/xhtml]<asp:RegularExpressionValidator runat="server" ControlToValidate="timetxt"
ValidationExpression="^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$" ErrorMessage="Время в формате чч:мм">
</asp:RegularExpressionValidator>
[/SRC]

Оно работает, только двоеточие надо руками писать. Но это уже мелочи жизни :)Если полностью устраивает и в вашем большом проекте это не выглядит как "везде хорошо, а тут затычку сделали", то ограничьтесь валидацией.
А по хорошему надо и клиентский скрипт иметь и валидатор.

Petrovna28Internet Explorer к сожалению только и нужен и да, не самых последних версий :(А каких конкретно? IE9 это не самая последняя версия и в ней мой скрипт работает


И вообще его можно завернуть в WebControl и будет у вас:
Код: plaintext
1.
2.
<asp:TimeBox CssClass="lenta_data" ID="timeBox" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="timeBox" ErrorMessage="Время в формате чч:мм" runat="server" ValidationExpression="^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$"/> 
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ввод времени. Помогите новичку.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]