Помогите мне улучшить ограничения по кодам Javascript? - PullRequest
0 голосов
/ 04 августа 2011

Этот Javascript, который использует функции из jQuery, очень удобен, но, получая обратную связь, есть некоторые ограничения, которые, я надеюсь, вы, ребята, могли бы помочь мне преодолеть.

Функция в основном создает текстовое поле с отформатированным временем (ЧЧ: ММ: СС), чтобы пользователям было легче вводить время, а не использовать средство выбора даты, которое включает много нажатий.

Code:

//global variable for keeping count on how many times the function is called 
var i = 0;

//for adding formatted time fields
function timemaker()
{

 //creates an input field of text type formatted with a value of "00:00:00"
 var input = $("<input>", 
    {
        name: 'time'+i, // e.g. time0, time1, time2, time3
        value: '00:00:00',
        maxlength: '8',
        size: '6'
    });

    //this function which uses jquery plugin causes the cursor in the field to goto position zero
    //when selected making it easier for the user to enter times and not need to select the correct position
    input.click(function() 
    {

        $(this).prop({
            selectionStart: 0,
            selectionEnd: 0
        });

        //this child function moves the cursor along the text field
        //when it reaches the first ":" it jumps to the next "00"
        }).keydown(function() {

    if (event.keyCode == 9) 
    { 
        return; 
    }

    else
    {
                var sel = $(this).prop('selectionStart'),
                val = $(this).val(),
                newsel = sel === 2 ? 3: sel;
                newsel = sel === 5 ? 6: newsel;

            $(this).val(val.substring(0, newsel) + val.substring(newsel + 1))

            .prop({
                selectionStart: newsel,
                selectionEnd: newsel
            });
    }
});

//this appends the text field to a divved area of the page

input.appendTo ( "# события"); я ++; вернуть; }

00: 00: 00

Ограничения Мне нужна помощь с

  • Скажем, например, что вы хотели ввести время 12:45:00, вы очевидно, не нужно вводить часть секунд (последний "00"), так как они уже там. Таким образом, вы решаете перейти из этого текстового поля но JavaScript интерпретирует ваше нажатие клавиши «Tab» как запись и удаляет ноль из поля, в результате чего значение будет похоже на 12: 45: 0
  • Не проверяет входные данные для 24-часового формата - как вы думаете, это будет можно это сделать? например первое число, которое вы вводите, "2", поэтому только у вас есть варианты "0,1,2,3"
  • Если вы допустили ошибку в 4-й цифре и повторно выбрали текстовое поле Вы должны ввести все снова.

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Это немного готовое решение, но вы можете рассмотреть его, если с вашим отфильтрованным текстовым полем ничего не получится:

http://jsfiddle.net/YLcYS/4/

0 голосов
/ 04 августа 2011

Я думаю, что главное, чего вам не хватает, что позволило бы вам реализовать все эти требования, - это аргумент, который jQuery передает вам в вашем обработчике события keydown.Таким образом, измените эту строку на:

.keydown(function(event){
    if (event.keyCode == 9) { return; }

    ... the rest of your code ...

, а затем вы можете использовать event.keyCode, чтобы определить, что было нажато, и принять соответствующие меры.Так, например, если event.keyCode == 9, то пользователь нажал клавишу TAB.

...