2011-04-09 3 views
3

私はcontentEditable要素の(既存ではない)変更イベントをシミュレートしようとしていますが、入力要素で同じ問題があると思います。残念ながら、ユーザーがテキストを選択してブラウザのコンテキストメニューから「削除」を選択したときに、イベントを取得する方法がわかりません。編集された要素の削除イベントを取得します

どのように私はそれを得ることができましたか?何をしたい

答えて

1

改訂答え、2012年6月8日

HTML5 input eventです。しかし、これは現在contenteditable要素のWebKitでのみ動作しますが、うまくいけば他のブラウザでも実装されます:Firefox 14 will apparently have it。それはalready implemented in all major browsers for text inputs and textareasです。

デモ:http://jsfiddle.net/timdown/5e5E5/1/

HTML:

<div id="test" contenteditable="true">...</div> 

JS:

var editableDiv = document.getElementById("test"); 

editableDiv.addEventListener("input", function(evt) { 
    alert("Editable content changed"); 
}, false); 

クロスブラウザのソリューションについては、さまざまなDOM mutation eventsの一部を使用することができます(また、MDNを参照)は解雇される。私はDOMCharacterDataModifiedとおそらくDOMNodeRemovedがこの目的のために有用なものであることを示唆しています。これらのイベントは、IE < = 8に存在しないことを

注さらに、これらのイベントは、DOM4 Mutation Observersの賛成で廃止されました。しかし、執筆時点(2012年6月)には、非常に最近のWebKitブラウザだけがこれをサポートしています。したがって、短期的には中期的には、最小限のフォールバックとして突然変異イベントが残っています。

editableDiv.addEventListener("DOMCharacterDataModified", function(evt) { 
    if (evt.newValue.length < evt.prevValue.length) { 
     alert("Characters deleted"); 
    } 
}, false); 
+0

@EliranMalka:私は、変異オブザーバーが興味を持ってスペック、次のしてきました。しかし、私はこの答えを書いたときにはどこにもいなかったし、非常に最近のWebKitとFirefoxだけが新しい突然変異観察者をサポートしているので、DOM突然変異イベントは短期から中期の唯一の実行可能な選択肢である。私はこれを反映するために私の答えを更新しました。 –

+0

はい、おそらく免責事項を追加するためのアップデートが良いオプションです。それはすぐにこの問題に対処する唯一の方法のように思われるので、良い答えです(したがって、私はそれを投票しました)。私はより良い解決策を探しています。十分に堅牢で広くサポートされているものを見つけることを願っています。 *(この対応は、DOM突然変異イベントの使用を避けるよう要請した削除されたコメントに由来しています)*。 –

+0

@EliranMalka:WebKitは 'contenteditable'要素の' input'イベントをサポートしていますが、より良い選択肢は存在しません。他に何もしません。 http://jsfiddle.net/upbNW/ –

関連する問題