2012-05-20 68 views
0

我使用流行的Rangy library內部contenteditable DIV。我的代碼很簡單:爲什麼Rangy圖書館不能在Opera中使用contenteditable?

var saved_selection = false; 

$('#contenteditable').bind('keypress mouseup', function(e){ 
    $(this).find('.rangySelectionBoundary').remove(); 
    saved_selection = rangy.saveSelection(); 
});​ 

現在,這在Chrome和FF中運行得非常好。但是,在Opera中,它的行爲非常奇怪,因爲它不允許在contenteditable中插入任何字符,而且它會失去焦點,或者至少看起來如此。

我準備了jsFiddle進行測試。在Opera中,不可能在可編輯的DIV中輸入任何字符:http://jsfiddle.net/twST6/1/

任何人都可以解釋並解決我的問題如何讓這段代碼在Opera中工作?

在此先感謝您的幫助。

回答

1

有趣。我認爲問題在於,在Opera中的按鍵事件期間更改DOM會停止發生本機瀏覽器按鍵動作(這是我以前見過的)。除了避免在每個按鍵上保存選擇外,我沒有看到一個簡單的方法。另一種解決方案是將選擇保存爲內容中的字符索引,這不會更改DOM,因此應該可以工作。看到這個答案:

https://stackoverflow.com/a/5596688/96100

我也接近釋放更強大的,基於索引字符選擇保存/恢復爲瘦長。觀看演示在這裏:

http://rangy.googlecode.com/svn/trunk/demos/textrange.html

順便說一句,有內置於四肢修長去除選擇標記方法:

rangy.removeMarkers(saved_selection); 
+0

感謝您的回答,雖然我在這樣的丟失,主要是因爲我不是專業的JS選擇專家,等等...你可以請更新我的/創建jsFiddle所以它會正常工作,即使在Opera?非常感謝您的幫助。 – Frodik

+0

@Frodik:http://jsfiddle.net/twST6/2/ –

+0

謝謝,完美! – Frodik