segunda-feira, 23 de novembro de 2009

Javascript - Função para manter o cursor no lugar

Você acabou de criar uma função onkeyup no javascript, mas descobriu que, ao mudar o conteúdo do inputbox, o cursor vai parar no final...

Segue uma função para resolver este problema, não lembro de onde peguei ela :/, mas é bem útil, ela mantém o cursor no devido lugar:
function getSelectionStart(o) {
    if (o.createTextRange) {
        var r = document.selection.createRange().duplicate()
        r.moveEnd('character', o.value.length)
        if (r.text == '') return o.value.length
        return o.value.lastIndexOf(r.text)
    } else return o.selectionStart
}


function setCaretTo(obj, pos) {
    if(obj.createTextRange) {
        /* Create a TextRange, set the internal pointer to
           a specified position and show the cursor at this
           position
        */
        var range = obj.createTextRange();
        range.move("character", pos);
        range.select();
    } else if(obj.selectionStart) {
        /* Gecko is a little bit shorter on that. Simply
           focus the element and set the selection to a
           specified position
        */
//        obj.focus();
        obj.setSelectionRange(pos, pos);
    }
}
Uso:
onkeyup="javascript:AlgumaFunctionOnKeyUpOuOutroEvento(this);"
function AlgumaFunctionOnKeyUpOuOutroEvento ()
{
    x=getSelectionStart(campo);
    y = campo.value.length

    // Processamento de algo

    x = x + campo.value.length - y
    setCaretTo(campo,x)
}

Nenhum comentário: