2014-03-26 60 views
3

在textarea標籤中按TAB並插入\t字符時,如何防止聚焦下一個元素有許多問題。或其他任何角色。所有這些都回答是這樣的:在textarea中取消選項卡

  1. 捕獲一個TAB按鍵
  2. 獲取當前插入符位置和選擇信息
  3. 替換值,使之包含\t或任何用戶想要的。

所有,直到你會後TAB

如果你這樣做,你會遇到一些副作用取決於瀏覽器按下「撤消」或CTRL+Z這工作正常使用:

  • Firefox將刪除\t,但插入符號位置將會結束並且textarea中的所有文本都將被選中
  • Chrome將不會將此\t作爲用戶輸入計數,因此CTRL+Z將撤銷前最後的操作,留在原位\t,還有哪些是硬一些插入符號的問題,預測
  • IE作爲Chrome的作用相同

你可以看這個位置http://jsfiddle.net/c7zc8/1/

問題是如何使其交叉瀏覽器和「可撤銷」?

回答

3

對於最新的Chrome(33),以下工作:

var ta = document.getElementById("textareaId"); 
ta.addEventListener("keydown", function(e) { 
    if (e.which===9) { 
     e.preventDefault(); 
     document.execCommand("insertText", false, "\t"); 
    } 
}, false); 

參考: Javascript textarea undo redo

對於IE瀏覽器,但是,沒有完美的解決方案。 IE11有ms-beginUndoUnit和ms-endUndoUnit,但即使這樣也不行,根據Tim Down在 internet explorer alternative to document.execCommand("insertText",...), for text insertion that can be undone/redone by the user

相關問題