我如何能够捕获firefox拼写检查事件?

时间:2012-01-31 10:04:58

标签: javascript firefox onchange spell-checking

我有一个textarea。在写了一些拼写错误的文本并使用rightclick后 - >纠正单词被正确拼写的单词替换。 现在,我的问题是我需要在纠正完成后提取一些javascript代码。

我怎样才能捕捉到firefox拼写检查事件? 如果只有一个使用firefox附加组件的解决方案,我也很高兴知道那个。

2 个答案:

答案 0 :(得分:3)

Mozilla在这种情况下发起oninput,没有在其他情况下测试,但应该在任何地方都可以使用。

有趣的是,在使用拼写纠正时,FF似乎会触发两个输入事件:它首先删除单词,然后插入新单词:

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

http://jsfiddle.net/7ssYq/

答案 1 :(得分:1)

我原本打算提出oninput事件,例如thg435's answer,但我想我会先在评论中提取更多细节。如果您不需要区分拼写检查器更正和其他类型的输入(键盘,粘贴,拖放等),那么oninput就可以正常完成工作。

如果您想要区分这些类型的输入,那么我担心没有特别针对拼写检查器更正的事件。但是,对于大多数其他类型的输入存在事件,因此如果您首先检查其他类型的事件,则至少可以缩小输入事件进行更正的可能性。请考虑以下事项:

(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; 
    }
})();

然而,这不是一个完美的解决方案。例如,事件仍将触发不由键盘启动的撤消/重做操作(以及可能的其他一些操作)。