Предотвратите поведение по умолчанию во вводе текста в то время как нажимающая стрелка

Я хотел бы добавить рекомендации из статьи об устранении неполадок оракула .

Исключение в потоке. Эта ошибка не обязательно означает утечку памяти

Возможные причины:

  1. Простая проблема конфигурации , где указанный размер кучи недостаточен для приложения.

  2. Приложение непреднамеренно хранит ссылки на объекты , и это предотвращает сбор мусора.

  3. Чрезмерное использование финализаторов .

Еще один потенциальный источник этой ошибки возникает в приложениях, которые чрезмерно используют финализаторы. Если у класса есть метод finalize, то объекты этого типа не освобождают свое пространство во время сборки мусора

После сборки мусора объекты помещаются в очередь для финализация , которая происходит в более позднее время. финализаторы выполняются потоком демона, который обслуживает очередь финализации. Если поток финализатора не может идти в ногу с очередью финализации, тогда куча Java может заполниться, и будет выдан исключительный тип OutOfMemoryError .

Один сценарий, который может вызвать эту ситуацию, - это когда приложение создает высокоприоритетные потоки , которые вызывают увеличение очереди финализации со скоростью, превышающей скорость в котором поток финализатора обслуживает эту очередь.

32
задан riddle 3 July 2009 в 19:17
поделиться

3 ответа

Чтобы сохранить позицию курсора, сделайте резервную копию input.selectionStart перед изменением значения.

Проблема в том, что WebKit реагирует на нажатие клавиши , а Opera предпочитает keypress , так что есть кладж: и то, и другое обрабатывается и регулируется.

var ignoreKey = false;
var handler = function(e)
{
    if (ignoreKey)
    {
        e.preventDefault();
        return;
    }
    if (e.keyCode == 38 || e.keyCode == 40) 
    {
        var pos = this.selectionStart;
        this.value = (e.keyCode == 38?1:-1)+parseInt(this.value,10);        
        this.selectionStart = pos; this.selectionEnd = pos;

        ignoreKey = true; setTimeout(function(){ignoreKey=false},1);
        e.preventDefault();
    }
};

input.addEventListener('keydown',handler,false);
input.addEventListener('keypress',handler,false);
28
ответ дан 27 November 2019 в 20:58
поделиться

Я протестировал код, и мне кажется, что он отменяет событие, но если вы не нажимаете стрелку в течение очень короткого времени - запускается событие нажатия клавиши, и это событие фактически перемещает курсор. Просто используйте preventDefault () также в обработчике событий нажатия клавиш, и все будет хорошо.

0
ответ дан 27 November 2019 в 20:58
поделиться

Наверное, нет. Вместо этого вам следует искать решение, чтобы переместить курсор обратно в конец поля, где он был. Эффект будет таким же для пользователя, поскольку он слишком быстр для восприятия человеком.

Я погуглил кое-что и нашел этот фрагмент кода. Я не могу протестировать его сейчас, и говорят, что он не работает в IE 6.

textBox.setSelectionRange (textBox.value.length, textBox.value.length);

-2
ответ дан 27 November 2019 в 20:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: