LINUX.ORG.RU

История изменений

Исправление Razip, (текущая версия) :

Пишу клавиатурный тренажер. Ввод символов обрабатываю с помощью oninput (потому что onkeypress и другие гадость). Если пользователь хочет удалить введенный символ или ошибочный, то он нажимает BackSpace и удаляет, но это за собой влечет изменение значения поля ввода, а значит и генерируется событие oninput, которое я и отменяю с помощью флага eventAllowed и обратно ставлю последнему значение true.

Суть моей проблемы в том, что при _удерживании_ BackSpace не генерируется событие oninput, а значит и eventAllowed некому поставить в положение true.

Иначе ввод в game.addChar() не будет пропускаться.

var game = new Game();

var eventAllowed = true;

inputField.onkeydown = function (event) {
    if (event.keyCode === 8) { // 8 значит BackSpace, если кто не в курсе
        game.deleteChar(inputField.value.length - 1);

        // Что-нибудь типа такого, чтобы при удержании
        // eventAllowed оставался в true
        if (some expression) {
            eventAllowed = false;
        }
    }
};

inputField.oninput = function () {
    eventAllowed && game.addChar(inputField.value.substr(-1));

    eventAllowed = true;
};

Надеюсь что теперь понятно.

Исходная версия Razip, :

Пишу клавиатурный тренажер. Ввод символов обрабатываю с помощью oninput (потому что onkeypress и другие гадость). Если пользователь хочет удалить введенный символ или ошибочный, то он нажимает BackSpace и удаляет, но это за собой влечет изменение значения поля ввода, а значит и генерируется событие oninput, которое я и отменяю с помощью флага eventAllowed и обратно ставлю последнему значение true.

Суть моей проблемы в том, что при _удерживании_ BackSpace не генерируется событие oninput, а значит и eventAllowed некому поставить в положение true.

Иначе ввод в game.addChar() не будет пропускаться.

var game = new Game();

var eventAllowed = true;

inputField.onkeydown = function (event) {
    if (event.keyCode === 8) { // 8 значит BackSpace, если кто не в курсе
        game.deleteChar(inputField.value.length - 1);

// Что-нибудь типа такого, чтобы при удержании
// eventAllowed оставался в true
// 
//         if (some expression) {
        eventAllowed = false;
// }
    }
};

inputField.oninput = function () {
    eventAllowed && game.addChar(inputField.value.substr(-1));

    eventAllowed = true;
};

Надеюсь что теперь понятно.