2012-01-31 9 views
4

私はテキストエリアを持っています。いくつかのスペルミスのテキストを書いて、rightclick - > correctionを使用すると、単語は正しくスペルの単語に置き換えられます。 今、私の問題は、私はいくつかのjavascriptコードをexectueする必要があることです。firefoxスペルチェック修正イベントをどのようにキャッチできますか?

どのように私はFirefoxのスペルチェック修正イベントをキャッチできますか? Firefoxのアドオンを使用している唯一の解決策がある場合は、そのことを知っていても幸いです。

+2

キャプチャに興味のあるスペルチェックのみですか、キーボードやその他のイベントに加えてスペルチェックの修正をキャプチャしようとしていますか?スペルチェックの修正と他のタイプのテキスト入力を区別する必要がありますか? –

+0

私の場合、私はそれらを区別する必要はありません(ただし、修正の解決策はより良いでしょう) – Thariama

答えて

3

この場合、Mozillaはoninputをテストしませんでしたが、どこでも動作します。

興味深いことに、FFは、スペル修正を使用している場合2つの入力イベントを発射するようだ:それは最初の単語を削除し、新しいものを挿入します。

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

http://jsfiddle.net/7ssYq/

+0

Firefox、Chrome、IE 9(バグ)、Opera、Safariでは 'oninput'がサポートされています。古いバージョンではバグがあるかサポートされていません。しかし、OPでは、入力の種類を区別する必要があるように聞こえますが、 'oninput'ではそれができません。 –

+0

不運にも、私はそれを機能させるようには思わない。おそらく、私はそれを私のページのiframeの中に置かれたcontenteditable body要素に適用する必要があるからです(リアルタイムエディタです)。 – Thariama

+0

ええと、あなたはあなたの質問にtextareaについて言及しました...とにかく、あなたは常に問題の要素にすべてのイベントをバインドすることができます(これを使って:http://stackoverflow.com/questions/6577346/jquery-bind-all-events-on) -object)を実行し、どのイベントが起動されているかをコンソールで調べます。 – georg

1

私が最初に行っていましたthg435's answerのようにoninputイベントを提案するには、まずコメントの詳細を釣ると思った。スペルチェッカーの修正と他のタイプの入力(キーボード、ペースト、ドラッグアンドドロップなど)を区別する必要がない場合は、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; 
    } 
})(); 

これは完璧な解決策ではありません。たとえば、キーボードで開始されていない元に戻す/やり直しのアクション(場合によっては他のアクション)に対してもイベントは発生します。

+0

私の質問に対する+1の解決策ですが、すべてのケースをカバーしていません – Thariama

関連する問題