使用javascript或jquery对textarea进行wordwrap
我需要使用javascript或jquery对textarea进行wordwrap,javascript,jquery,html,textarea,Javascript,Jquery,Html,Textarea,我需要textarea最多包含5行和 当用户写入2个单词时,每行最多应包含15个字符 e、 g.123456123456789,如果该行字符限制超过15,则 它应该将第二个单词带到下一行,并将\n字符带到第一行 (表示123456将与\n一起位于第一行,123456789将位于第二行) , 由于某些原因,我需要在数据库中维护\n(替换) 我写了这段代码,在某些情况下给出了模糊的结果 <textarea onkeypress="charCountTextarea('txt1',event,
textarea
最多包含5行和
当用户写入2个单词时,每行最多应包含15个字符
e、 g.123456123456789,如果该行字符限制超过15,则
它应该将第二个单词带到下一行,并将\n
字符带到第一行
(表示123456将与\n一起位于第一行,123456789
将位于第二行)
,
由于某些原因,我需要在数据库中维护\n
(替换)
我写了这段代码,在某些情况下给出了模糊的结果
<textarea onkeypress="charCountTextarea('txt1',event,'75','14')" id="txt1"></textarea>
var countLines=0;
var newLines;
function charCountTextarea(textAreaId,e,limit,lineLen)
{
newLines = $("#"+textAreaId).val().split("\n").length;
var t = $("#"+textAreaId)[0];
var lineIndex = t.value.substr(0, t.selectionStart).split("\n").length-1;
//console.log("new lines"+lineIndex);
if(newLines >= 5 && $("#"+textAreaId).val().split("\n")[lineIndex].length>lineLen)
{
if( e.keyCode!=8 && e.keyCode!=46 && e.keyCode!=33 && e.keyCode!=34 && e.keyCode!=35 && e.keyCode!=36 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40)
{
e.preventDefault();
return false;
}
}
else
if($("#"+textAreaId).val().split("\n")[lineIndex].length>=lineLen) // which will count the total line char condition
{
console.log($("#"+textAreaId).val().split("\n")[lineIndex][lineLen-1]);
if($("#"+textAreaId).val().split("\n")[lineIndex][lineLen-1].indexOf(" ")==-1 && e.keyCode!=8 && e.keyCode!=46 && e.keyCode!=33 && e.keyCode!=34 && e.keyCode!=35 && e.keyCode!=36 && lineIndex != 4 && newLines<5)
{
// to bring the word in next line
var str = $("#"+textAreaId).val(), replacement = '\n';
str = str.replace(/ ([^ ]*)$/,replacement+'$1');
$("#"+textAreaId).val(str);
}
else
if(e.keyCode!=8 && e.keyCode!=46 && e.keyCode!=33 && e.keyCode!=34 && e.keyCode!=35 && e.keyCode!=36 && lineIndex!=4 && newLines<5)
{
// to insert next line
insertTextAtCaret(document.getElementById(textAreaId), "\n");
}
}
if(e.keyCode == 13 && newLines >= 5)
{
//linesUsed.css('color', 'red');
e.preventDefault();
return false;
}
}
var countLines=0;
var新线;
函数charCountTextarea(textAreaId、e、limit、lineLen)
{
换行符=$(“#”+textAreaId).val().split(“\n”).length;
var t=$(“#”+textAreaId)[0];
var lineIndex=t.value.substr(0,t.selectionStart).split(“\n”).length-1;
//console.log(“新行”+行索引);
如果(换行符>=5&&$(“#”+textAreaId).val().split(“\n”)[lineIndex].length>lineLen)
{
如果(e.keyCode!=8&&e.keyCode!=46&&e.keyCode!=33&&e.keyCode!=34&&e.keyCode!=35&&e.keyCode!=36&&e.keyCode!=37&&e.keyCode!=38&&e.keyCode!=39&&e.keyCode!=40)
{
e、 预防默认值();
返回false;
}
}
其他的
if($(“#”+textAreaId).val().split(“\n”)[lineIndex].length>=lineLen)//这将计算行字符条件的总数
{
console.log($(“#”+textAreaId).val().split(“\n”)[lineIndex][lineLen-1]);
if($(“#“+textAreaId).val().split(“\n”)[lineIndex][lineLen-1].indexOf(“”)=-1&&e.keyCode!=8&&e.keyCode!=46&&e.keyCode!=33&&e.keyCode!=34&&e.keyCode!=36&&lineIndex!=4&&newLines您无法知道是否将使用键盘输入。我可以用鼠标在那里粘贴文本
我将依赖一个函数,该函数将不断检查输入并执行您想要的操作,一旦textarea聚焦,我将使用setInterval()
函数执行该函数,然后在textarea失去焦点时使用clearInterval()
函数清除该函数
这个函数将使用一个RegExp
来处理输入并将其拆分为必要的行
编辑:以下是我的意思
$('body').on('focus','#txt1',function(e) {
$(this).data('int',setInterval(checkInput,1));
}).on('blur','#txt1',function(e) {
clearInterval($(this).data('int'));
$(this).removeData('int');
});
function checkInput() {
var val = $('#txt1').val();
// process val here
$('#txt1').val(val);
}
函数charCountTextarea(textAreaId、e、limit、lineLen)
{
var代码=e.charCode | | e.keyCode;
换行符=$(“#”+textAreaId).val().split(“\n”).length;
var t=$(“#”+textAreaId)[0];
var lineIndex=t.value.substr(0,t.selectionStart).split(“\n”).length-1;
log('val t:'+$(“#”+textAreaId).val()+'行索引:'+lineIndex+'newLines'+newLines);
如果(lineIndex==10&&$(“#”+textAreaId).val().split(“\n”)[lineIndex].length>(lineLen+1)&&code!=8&&code!=46&&code!=33&&code!=34&&code!=35&&code!=36&&code!=37&&code!=38&&code!=39&&code!=40)
{
$(“#”+textAreaId).val($(“#”+textAreaId.val()).substring(0,$(“#”+textAreaId.val().length-1));
警报(“您已到达极限”);
返回false;
}
if(lineindexlineen)//哪一个将计算行字符条件的总数
{
控制台日志(“处于状态:”);
如果(代码!=8&&code!=46&&code!=33&&code!=34&&code!=35&&code!=36&&code!=37&&code!=38&&code!=39&&code!=40)
{
//插入下一行
insertTextAtCaret(document.getElementById(textAreaId),“\n”);
}
}
}
Related CSS 3:我需要维护\n,而且使用CSS不会为单词wrapi添加\n不想失去用户的注意力,无论他在textarea中键入什么,都应该像他在其中写入什么一样。谢谢suggestion@SunilLohar我不是说改变焦点。我编辑了我的答案并添加了一个例子。谢谢你的建议,我会检查一下这项工作符合你我的逻辑。
function charCountTextarea(textAreaId,e,limit,lineLen)
{
var code = e.charCode || e.keyCode;
newLines = $("#"+textAreaId).val().split("\n").length;
var t = $("#"+textAreaId)[0];
var lineIndex = t.value.substr(0, t.selectionStart).split("\n").length-1;
console.log('val t :'+$("#"+textAreaId).val()+' line index : '+lineIndex+' new lines '+newLines);
if(lineIndex == 10 && $("#"+textAreaId).val().split("\n")[lineIndex].length>(lineLen+1) && code!=8 && code!=46 && code!=33 && code!=34 && code!=35 && code!=36 && code!=37 && code!=38 && code!=39 && code!=40)
{
$("#"+textAreaId).val(($("#"+textAreaId).val()).substring(0, $("#"+textAreaId).val().length - 1));
alert('You are reached to limit');
return false;
}
if(lineIndex<5)
{
$("#"+textAreaId).val($("#"+textAreaId).val().wordWrap(lineLen, "\n", 0));
}
var countLine1 = $("#"+textAreaId).val().split("\n")[0].length;
if($("#"+textAreaId).val().split("\n")[lineIndex].length>lineLen) // which will count the total line char condition
{
console.log("In condition : ");
if(code!=8 && code!=46 && code!=33 && code!=34 && code!=35 && code!=36 && code!=37 && code!=38 && code!=39 && code!=40)
{
// to insert next line
insertTextAtCaret(document.getElementById(textAreaId), "\n");
}
}
}