Фокус текстовой области с помощью каретки после текста в браузере Android - PullRequest
4 голосов
/ 01 февраля 2011

В настоящее время я пишу простое веб-приложение для просмотра твитов в браузере Android.Я использую этот код для фокусировки каретки после текущего текста:

var oldContent = document.tweetBox.tweet.value;
document.tweetBox.tweet.value = '';
document.tweetBox.tweet.focus();
document.tweetBox.tweet.value = oldContent + to;

Этот код работает безупречно в Chrome, Fluid, Opera, Firefox и Safari.
Самое странное, что курсор начинает мигатьПОСЛЕ текста «to», если я использую аппаратную клавиатуру, но вводимый мной текст начинается там, где я набирал текст до выполнения JS, описанного выше.
Если я использую программную клавиатуру, ввод текста начинается с начала текстовой области.

ps javascript является частью предложения для подписчиков, поэтому, если вы начнете вводить @gn, он предложит @gnur_nl в отдельном div, и когда вы нажмете ввод, будет выбрана эта запись.

Обновление: Такое поведение, похоже, является результатом ошибки браузера, отчет об ошибке был подан .

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011
setCaret = function(obj,pos) {
    // IE Support
    if (document.selection) { 

        // Set focus on the element
        obj.focus ();

        // Create empty selection range
        var oSel = document.selection.createRange ();

        // Move selection start and end to 0 position
        oSel.moveStart ('character', -obj.value.length);

        // Move selection start and end to desired position
        oSel.moveStart ('character', pos);
    }

    //standard browsers
    else if (obj.selectionStart || obj.selectionStart == '0') {
        obj.selectionStart = pos;
        obj.selectionEnd = pos;
        obj.focus ();
    }
};

и установка на правильные позиции

setCaret(document.getElementById("area"),document.getElementById("area").value.length);
0 голосов
/ 01 февраля 2011

Звучит как ошибка браузера.Попробуйте установить положение каретки вручную:

var textArea = document.tweetBox.tweet, oldContent = textArea.value;
textArea.value = oldContent + to;
textArea.focus();
textArea.selectionStart = textArea.selectionEnd = textArea.value.length;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...