我有一个文本区(id = details
)的表单。
是否有一种方法可以在光标位置插入换行符(<br />
)当在此文本区域内按Enter键时?
我只需要这个在IE中工作。
<textarea class="input height120 elastic span12" name="details" id="details" onkeyup="countCharLimit(event)" onpaste="countCharLimit(event)"></textarea>
试试这个:
$('textarea').keypress(function (e){
if(e.keyCode == 13){
$('textarea').val($('textarea').val()+"<br />");
}
});
你可以试着在这里修改
编辑:我意识到这只是在最后添加一个<br />
,经过更多的研究,我发现了这个解决方案:
$('textarea').keypress(function (e){
if(e.keyCode == 13){
e.preventDefault();
this.value = this.value.substring(0, this.selectionStart)+"<br />"+"n";
}
});
这里有一个小提琴
源代码(大部分):使用jQuery在textarea中插入文本
EDIT AGAIN:看起来OP希望最后的文本也被清除,所以我相应地更新了我的代码(对于其他人看到这一点:查看我相关的第一次编辑,以便您想要保留剩余的文本)。
你需要先找到插入符号的位置,如下所示:
var caretPos = function() {
var el = $("#details").get(0);
var pos = 0;
if('selectionStart' in el) {
pos = el.selectionStart;
} else if('selection' in document) {
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;
}
return pos;
}
取自:here
那么你做:
var textofDetails = $("#details").val();
jQuery("#detail").val(textofDetails.substring(0, caretPos) + "<br/>" + textofDetails.substring(caretPos) );
主要编辑:
不需要以上所有内容;您的函数将是
function replaceNewLine(){
jQuery("#detail").val().replace(/\n/g, "<br />");
}
当然可以。似乎是这样,您需要keydown事件处理和(可能的)setTimeout 0 hack,看看这里:为什么setTimeout(fn, 0)有时很有用?