2012-01-24 29 views
13

基本的に私はwindow.getSelection()が変更されたことを知り、ハンドラをこのイベントにバインドする必要があります。アイデア?ハンドラをウィンドウの選択変更にバインドする方法はありますか?

OBS:私はINPUTまたはTEXTAREAの選択変更をバインドするつもりはないことに注意してください。私は窓の中のどんな選択についても話している。

+0

の可能重複[JavaScriptでウィンドウ選択変更イベントを監視する方法](http://stackoverflow.com/questions/5139623/how-to-monitor-window-selection-change-in-javascript) –

+2

私はウィンドウの選択イベントを監視する必要があるため、重複していません –

+0

実際には重複していると思います。同じことをむしろ間違って尋ねているようですが、そこには答えがあります役に立たない。より良い複製はこれです:http://stackoverflow.com/questions/8442158/selection-change-event-in-contenteditable –

答えて

-1

は、私はそれが選択の変更を検出するのないクロスブラウザの方法はありません

function foo() { 
    var selObj = window.getSelection(); 
    alert(selObj); 
    var selRange = selObj.getRangeAt(0); 
    // work something with selObj 
} 
+0

選択が変更された場合、これはどのように呼び出されますか?それは問題であり、選択肢が得られません。 –

17

を助けるだろうと思います。 IE(バージョン5.5以降)、WebKit/Blinkブラウザ(例えば、Chrome、Safari、Operaバージョン)はdocumentselectionchangeイベントをサポートしています。

Firefoxとpre-Blink Operaにはこのようなイベントはなく、キーボードやマウスのイベントで選択した変更を検出するだけで済みますが、これは満足できません(コンテキストメニューや編集メニューから "Select All" window.getSelection()によって返されたSelectionオブジェクトをポーリングするだけです(選択項目のanchorNodeanchorOffsetfocusNode、およびfocusOffsetのプロパティを以前の値と比較するだけで十分です)。

+1

アップデート:Operaはセレクションチェンジをサポートしています(Blinkへの切り替え以降)。仕事のために、私は最近、軽量のselectchange polyfillをFirefox用に書いています。 https://github.com/2is10/selectionchange-polyfill追跡を目的としたFirefoxの機能要求:https://bugzilla.mozilla.org/show_bug.cgi?id=571294 – jaredjacobs

+0

@jaredjacobs:ありがとう。私はそれを私の答えに取り入れました。 –

+1

FF43に入っていますが、まだフラグを変更する必要があります。すぐに利用可能になるはずです。 https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange#Browser_compatibility –

9

これにはブラウザ間のイベントはありません。

しかし、selectionchangeと呼ばれるイベントが存在します。これはドキュメントの選択内容の変更ごとに発生しますが、Internet Explorerや最近のWebKit(Chrome/Safari)でのみサポートされているため、Firefox/Operaはありません。

あなたはこのようselectionchangeイベントを使用することができます。

$(document).on('selectionchange', function(e) { 
    console.log('selectionchange', e.originalEvent); 
}); 

jsfiddle example

+0

^これです。しかし、これは非常に貪欲で、 'window.onresize'と同様に、何度も何度も起動することがあります。 – Kafoso

関連する問題