Обнаруживать, когда "позиция курсора внутри изменения ввода" в jQuery?

Я использую плагин под названием jQuery TextRange, чтобы получить позицию курсора внутри ввода (в моем случае, текстового поля) и установить позиция тоже.

Но теперь у меня есть одна вещь, которая, я думаю, сложнее решить. Я хочу знать, существует ли в jQuery одно событие, например "позиция курсора". Что я имею в виду:

$('#my-input').on('cursorchanged', function(e){
    // My code goes here.
)};

Я хочу знать, когда курсор перемещается внутри ввода /textarea, не имеет значения, если стрелка или щелчок мыши. Я новичок в jQuery, но я думаю, что не существует такого события в jQuery или существует?

Ответы

Ответ 1

Нет, нет такого события, как "позиция курсора изменена".

Но если вы хотите узнать, изменилась ли позиция курсора, вы можете сделать что-то вроде этого: тестировался с jquery 1.7, я тестировал в Ie8 и хром

var last_position = 0;
$(document.ready(function () {
    $("#my_input").bind("keydown click focus", function() {
        console.log(cursor_changed(this));
    });
});

консоль .log вернется, если курсор изменился

function cursor_changed(element) {
    var new_position = getCursorPosition(element);
    if (new_position !== last_position) {
        last_position = new_position;
        return true;
    }
        return false;
}

function getCursorPosition(element) {
    var el = $(element).get(0);
    var pos = 0;
    if ('selectionStart' in el) {
        pos = el.selectionStart;
    } else if ('selection' in document) {
        el.focus();
        var Sel = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart('character', -el.value.length);
        pos = Sel.text.length - SelLength;
    }
    return pos;
}