所以我做了一個textarea中的tab鍵處理(插入一個選項卡)。在大多數情況下,它可以作爲一種魅力。textarea中的選項卡導致歌劇失去焦點
問題:歌劇:如果用戶保持按Tab鍵(標籤插入非常快),textarea元素失去焦點和處理過程不起作用。正如你在下面的例子中看到的,焦點在2個按鈕和textarea中不斷變化。
代碼:
<html>
<head>
<script type="text/javascript">
function onkd(e) {
var keyCode = 0;
if (document.selection) {
keyCode = e.keyCode;
} else {
keyCode = e.which;
}
if (keyCode == 9) {
if (e.preventDefault) {
e.preventDefault();
e.stopPropagation();
} else {
e.returnValue = false;
e.cancelBubble = true
}
var o = document.getElementById("texta");
if (o.setSelectionRange) {
var sS = o.selectionStart;
var sE = o.selectionEnd;
o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
o.setSelectionRange(sS + 1, sS + 1);
o.focus();
} else if (o.createTextRange) {
document.selection.createRange().text = "\t";
}
}
}
</script>
</head>
<body>
<p><button type="submit">dummy button1</button></p>
<textarea id="texta" style="width: 400px; height: 400px; overflow: hidden; white-space: pre;" onkeydown="onkd(event);">hahaha huhuhu hohoho hihihi hehehe</textarea>
<p><button type="submit">dummy button2</button></p>
</body>
</html>
更新的jsfiddle:http://jsfiddle.net/JEzxx/2/
如果TAB鍵被按下的onkeyup事件,然後在的onblur我能趕上做:
onblur="if (bIsTabPressed) document.getElementById('texta').focus(); return false;"
但並不能解決問題。我不明白爲什麼元素在歌劇中首先失去焦點時,連續按下Tab鍵。
問題似乎存在,因爲戲不會在keydown事件提供的preventDefault ......研究解決的辦法......
我喜歡你的腳本。但是,當光標到達行尾(在添加'wrap =「off」'後)時,它會繼續在同一行中添加製表符。相反,我認爲,它應該從下一行開始。 – SachinGutte
是的,我認爲它不斷添加在同一行,因爲如果你退格,它需要你花一段時間看到光標。 – MIrrorMirror