3

更新:這已被確定爲Chrome中的一個錯誤。 (謝謝@ michael-robinson)編輯禁用後,紅色拼寫檢查波形仍保持在鍍鉻狀態

在Chrome(至少v22)中,我注意到即使在禁用了contentEditable之後,拼寫檢查「紅色波浪狀」下劃線仍有可能保留下來。

我做了一個的jsfiddle證明:jsfiddle demo

squiggles and spelling errors

即使我禁用contentEditable之前設置屬性spellcheck="false",他們依然存在。

任何人都知道如何解決或解決這個問題的好方法?理想情況下,當內容可編輯時,我會保留內置的拼寫檢查功能。

+0

怎麼樣,而不是禁用contentEditable,你刪除屬性? –

+0

@BrianNoah我會給它一個去,儘管contentEditable屬性似乎被'false'值所尊重 – aaaidan

+0

@BrianNoah Nah,似乎並沒有改變拼寫檢查下劃線的破壞行爲。謝謝,不過。 – aaaidan

回答

3

你有沒有嘗試設置display: none(使用CSS),然後設置顯示器回到它是?或者,你可以創建一個元素的副本(但contenteditable禁用),將其放置在原始元素之後,然後刪除原始元素。

更新1:第一個解決方案沒有工作,但第二個解決方案。更新JSfiddle http://jsfiddle.net/RegVn/6/

更新2:上面的解決方案使用了innerHTML,它刪除了破壞事件處理程序。它也破壞選擇/插入位置。

新方法使用jQuery的clone()方法(以深克隆模式)創建對象的副本(它通過事件處理程序進行復制),並具有自定義功能以保存對選擇的引用,並在之後進行恢復。請注意,選擇保存/恢復功能不會在ie6-8中工作,但我認爲這是可以接受的,因爲問題標記爲Chrome。更新JSfiddle:http://jsfiddle.net/RegVn/23/

+0

不錯的建議,但它不起作用,對不起! – aaaidan

+0

創建一個和舊的一樣的新元素 - 我用一個例子更新了JSfiddle(參見編輯答案)。 –

+0

嘿,感謝堆創建一個jsfiddle來演示,我明白這一點。不幸的是,這個解決方案有幾個重要的缺點,我在下面的回答中概述了這些:http://stackoverflow.com/a/12888119/26331 – aaaidan

1

拼寫檢查屬性指定的元素是否有它的拼寫和語法檢查與否:

spellcheck="false"

+0

啊,謝謝 - 我應該提到,即使在出現拼寫檢查=「false」後,他們仍然會持續存在。 – aaaidan

1

如果更新元素的innerHTML,則將重新評估拼寫檢查,因此如果spellcheck="false"或元素不可編輯,它們將消失。

例如:

myElement.innerHTML = myElement.innerHTML + " "; // add a space to force a change. 

這具有顯著缺點:

  • 事件處理程序和引用將被無效(在元件內部的所有元素被有效地從DOM移除)的任何元件javascript對象。這也意味着只有javascript的屬性(如複選框的indeterminate屬性或任何其他自定義屬性)將被銷燬。
  • 選擇或插入位置被破壞。
  • 如果你有大量的內容,這對於CPU來說是一個不平凡的操作,尤其是在移動設備上。

這是現在好了,但我仍然在尋找更好的答案。建議?

+1

再次參閱上文。我不能讓它更少cpu密集型(可能有另一種方法可以實現這一點),但新方法將保持事件處理程序並恢復選擇。 –

0
var content = $("#editor").html(); 
$("#editor").html("") 
$("#editor").attr('spellcheck', 'false'); 
$("#editor").html(content); 

嘗試此代碼,它應該工作。這是基於克隆內部HTML的前一個答案。

適用於FF和Chrome。

+0

太棒了,這是緊湊的,易於理解。但不幸的是,它會摧毀內容中存在的任何事件處理程序。 – aaaidan

0

將屬性spellcheck="false"添加到元素適用於我。

+1

哈哈,喜慶!這一點現在必須解決。我會檢查。乾杯 – aaaidan