【问题标题】:How can i catch the firefox spellcheck correction event?我怎样才能捕捉到 Firefox 拼写检查更正事件?
【发布时间】:2012-01-31 10:04:58
【问题描述】:

我有一个文本区域。在编写了一些拼写错误的文本并使用右键单击 -> 更正后,该单词将替换为正确拼写的单词。 现在,我的问题是,当更正完成时,我需要执行一些 javascript 代码。

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

【问题讨论】:

  • 您是否只对拼写检查感兴趣,或者您是否尝试捕获除了键盘和其他事件之外的拼写检查更正。您需要区分拼写检查更正和其他类型的文本输入吗?
  • 在我的情况下,我不需要区分它们(但解决方案会更好)

标签: javascript firefox onchange spell-checking


【解决方案1】:

Mozilla 在这种情况下触发了oninput,没有在其他地方进行测试,但应该可以在任何地方工作。

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

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

http://jsfiddle.net/7ssYq/

【讨论】:

  • 澄清一下,oninput 在 Firefox、Chrome、IE 9 (buggy)、Opera 和 Safari 中受支持,但在旧版本中存在错误或不受支持。但是,OP 听起来他需要区分不同类型的输入,而 oninput 不允许您这样做。
  • 不幸的是,我似乎没有让它工作。也许是因为我需要将它应用到一个 contenteditable 正文元素,该元素放置在我页面上的 iframe 内(它是一个实时编辑器)。
  • 嗯,您在问题中提到了 textarea...无论如何,您始终可以将所有事件绑定到有问题的元素(使用此:stackoverflow.com/questions/6577346/…)并在控制台中查看正在触发哪些事件.
  • @Thariama: oninput 不会触发 contenteditable 元素(在大多数浏览器中),不幸的是。
  • 对,我试图在问题中使其尽可能简单,但实际上它有点复杂。这正是我尝试过的 - 结果什么都没有
【解决方案2】:

我原本打算建议 oninput 事件,例如 thg435's answer,但我想我会先在 cmets 中了解更多细节。如果您不需要区分拼写检查器更正和其他类型的输入(键盘、粘贴、拖放等),那么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; 
    }
})();

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

【讨论】:

  • +1 解决了我的问题,但并不涵盖所有情况
猜你喜欢
  • 2010-12-29
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多