Как я могу поймать событие исправления проверки орфографии firefox? - PullRequest
5 голосов
/ 31 января 2012

У меня есть текстовая область. После написания некоторого текста с ошибкой и использования правого клика -> исправление слово заменяется на слово с правильным написанием. Теперь моя проблема заключается в том, что мне нужно извлечь некоторый код JavaScript, когда исправление будет сделано.

Как я могу поймать событие исправления проверки орфографии firefox? Если есть только решение, использующее надстройку Firefox, я тоже был бы рад узнать это.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Mozilla запускает oninput в этом случае не тестировалось в других, но должно работать везде.

Интересно, что FF запускает два события ввода при использовании правописания: сначала оно удаляет слово, а затем вставляет новое:

> value=[holy coww]
(right click and choose "cow")
> value=[holy ]
> value=[holy cow]

http://jsfiddle.net/7ssYq/

1 голос
/ 31 января 2012

Я изначально собирался предложить событие oninput, например, ответ thg435 , но я подумал, что сначала я найду подробности в комментариях.Если вам не нужно различать исправления для проверки орфографии и другие типы ввода (клавиатура, вставка, перетаскивание и т. Д.), То oninput прекрасно справится с этой задачей.

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

(function () {
    var el = document.getElementById("MyInput"),
        ignore = false;

    el.oninput = function (e) {
        // ignore the events that we don't need to capture
        if (ignore) {
            ignore = false;
            return true;
        }

        // Your code here
    }

    // IIRC, you need the following line for the `ondrop` event to fire
    el.ondragover = function () { return false; }

    // Ignore paste, drop and keypress operations
    el.onpaste = el.ondrop = el.onkeypress = setIgnore;

    function setIgnore (e) {
        ignore = true; 
    }
})();

Однако это не идеальное решение.Например, событие по-прежнему будет запускаться для действий отмены / возврата (и, возможно, некоторых других действий), которые не инициированы клавиатурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...