Сосредоточьтесь на текстовой области после вкладки в библиотеке прототипа javascript - PullRequest
3 голосов
/ 08 ноября 2011

Я пытаюсь сделать текстовую область доступной для вкладок, и как часть этого я написал следующий javascript.Я использую прототип библиотеки js,

document.observe("dom:loaded", function (){
    $('tabawaretextarea').observe('keydown',function(e) {
            if(e.keyCode === 9) { // tab was pressed
            $('tabawaretextarea').value = $F('tabawaretextarea')+"\t";
                            $('tabawaretextarea').focus();
            return false;
        }
    })
});

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

Кроме этого, я также пытался установить все элементы tabindex на -1, в какой-то статье говорилось, что я должен использовать класс "autoTab" и установить maxlength для работы с табуляцией - я попытался сделать это, так как используюоснованный на пружине атрибут <form:textarea/> maxlength недопустим (в противном случае maxlength не допускается в текстовых областях).

Есть предложения?

1 Ответ

2 голосов
/ 08 ноября 2011

return false; ничего не делает в обработчиках событий-прототипов. Чтобы подавить действие по умолчанию, используйте Event.stop(). Кроме того, вам нужно сделать это при нажатии клавиш, а не при нажатии клавиш:

document.observe("dom:loaded", function (){
    $('tabawaretextarea').observe('keypress',function(e) {
        if(e.keyCode === 9) { // tab was pressed
            $('tabawaretextarea').value += "\t";
            e.stop();
        }
    });
});

ПРИМЕЧАНИЕ. Это работает в FF, но не работает в Chrome и AFAIK. Обходного пути нет. Я не проверял IE, Opera или Safari.

РЕДАКТИРОВАТЬ: «keydown» действительно работает и работает в Chrome и FF. Опять же, другие браузеры не проверены, но вот решение:

document.observe("dom:loaded", function (){
    $('tabawaretextarea').observe('keydown',function(e) {
        if(e.keyCode === 9) { // tab was pressed
            $('tabawaretextarea').value += "\t";
            e.stop();
            // note that we don't need to focus() the element as it hasn't lost focus
        }
    });
});

Смотрите это на jsFiddle

...