使用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");
        }
    }
}