Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ввод времени. Помогите новичку. / 25 сообщений из 26, страница 1 из 2
20.02.2019, 10:09
    #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
20.02.2019, 10:29
    #39776604
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод времени. Помогите новичку.
Petrovna28,

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

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

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

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

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

Petrovna28

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

необязательнопо китайскому календарю?))
Если мы будем предполагать невозможное, тогда Вы ошиблись адресом(с)
...
Рейтинг: 0 / 0
20.02.2019, 18:43
    #39776912
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод времени. Помогите новичку.
Изопропил,
Да)). Тогда слово необязательно это согласие)
...
Рейтинг: 0 / 0
20.02.2019, 22:47
    #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
20.02.2019, 23:20
    #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
20.02.2019, 23:23
    #39777034
Petrovna28
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод времени. Помогите новичку.
Дмитрий Мух, большое Вам спасибо!
...
Рейтинг: 0 / 0
21.02.2019, 00:04
    #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
21.02.2019, 09:23
    #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
21.02.2019, 11:26
    #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
22.02.2019, 11:02
    #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
22.02.2019, 11:54
    #39777824
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ввод времени. Помогите новичку.
Petrovna28,
Молодец.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ввод времени. Помогите новичку. / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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