浏览器中的默认行为是选择下一个表单元素。我希望我的文本框缩进代码,让我们在按下制表符时说 4 个空格。就像您在 IDE 中缩进代码一样。我将如何在 JavaScript 中实现这种行为?如果我必须使用 jQuery,或者它更简单,我可以接受。
谢谢!
浏览器中的默认行为是选择下一个表单元素。我希望我的文本框缩进代码,让我们在按下制表符时说 4 个空格。就像您在 IDE 中缩进代码一样。我将如何在 JavaScript 中实现这种行为?如果我必须使用 jQuery,或者它更简单,我可以接受。
谢谢!
跟踪关键代码并在元素中添加 4 个空格应该可以做到。您可以在按下 Tab 键时阻止默认设置。像这样?:
在所有评论后编辑:
啊,好吧,所以你实际上要求几个 JS 函数(获取文本区域中的光标位置、更改文本、设置文本区域中的光标位置)。多看看周围就会给你所有这些,但因为我是一个好人,我会把它放在那里给你。其他答案可以在这篇关于 getCursorPosition()的文章和这篇关于 setCursorPosition() 的文章中找到。我为你更新了jsFiddle。这是代码更新
<script>
$('#myarea').on('keydown', function(e) {
var thecode = e.keyCode || e.which;
if (thecode == 9) {
e.preventDefault();
var html = $('#myarea').val();
var pos = $('#myarea').getCursorPosition(); // get cursor position
var prepend = html.substring(0,pos);
var append = html.replace(prepend,'');
var newVal = prepend+' '+append;
$('#myarea').val(newVal);
$('#myarea').setCursorPosition(pos+4);
}
});
new function($) {
$.fn.getCursorPosition = function() {
var pos = 0;
var el = $(this).get(0);
// IE Support
if (document.selection) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
// Firefox support
else if (el.selectionStart || el.selectionStart == '0')
pos = el.selectionStart;
return pos;
}
} (jQuery);
new function($) {
$.fn.setCursorPosition = function(pos) {
if ($(this).get(0).setSelectionRange) {
$(this).get(0).setSelectionRange(pos, pos);
} else if ($(this).get(0).createTextRange) {
var range = $(this).get(0).createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
}(jQuery);
</script>
<textarea id="myarea"></textarea>