看看这样能满足你要求不 <html> <head> <noscript><meta http-equiv="refresh" content="0; URL=http://www.google.com"/></noscript> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title></title> <script language=javascript> function getTextRange() { var range = document.all("txt").createTextRange(); var rect = range.getClientRects(); if (rect.length < 5) { return ; } else { var bottom = rect[3].bottom; range.moveEnd("character", -range.text.length); while (range.offsetTop + range.boundingHeight <= bottom) { range.expand("character"); if (document.all("txt").value == range.text) { break; } } document.all("txt").value = range.text.substr(0, range.text.length - 1); return ; } } </script> </head> <body> <textarea id="txt" onkeyup="getTextRange()" onchange="getTextRange()" rows=5> <table border=1 cellpadding=0 cellspacing=0> <tr><td>1111111111111111111111</td></tr> <tr><td>1111111111111111111111</td></tr> <tr><td>1111111111111111111111</td></tr> <tr><td>1111111111111111111111</td></tr> <tr><td>1111111111111111111111</td></tr> <tr><td>1111111111111111111111</td></tr> </table> </textarea> </body> </html>
你可以考虑用4个textbox做个假的啊。没必要非要用textarea吧
<body> <script language="javascript"> function a() { var resoult=""; var obj=document.getElementById("txt"); var valu=obj.innerText; var arr=valu.split("\r\n"); //alert(arr.length) if (arr.length>4){ resoult=arr[0]+"\n"+arr[1]+"\n"+arr[2]+"\n"+arr[3]; obj.innerText=resoult; }} </script> <textarea id="txt" onkeydown="a()" onchange="a()" onpaste="a()" rows=5></textarea> </body> <!----粘贴的问题没有解决---->
<body> <script language="javascript"> function a(b) //b :为每行最多字符数,没有考虑中文问题 { var count=0; var resoult=""; var tmpstr=""; var obj=document.getElementById("txt"); var valu=obj.innerText; var arr=valu.split("\r\n"); //按换行进行分割 for (var i=0;i<5;i++){ if (!(i<arr.length)) return; var tmp=arr[i]; if (tmp.length>b){ for (j=1;j<=(Math.floor(tmp.length/b)+1);j++){ if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度 tmpstr=tmp.substring(b*(j-1),b*j);
<body> <script language="javascript"> function a(b) //b :为每行最多字符数,没有考虑中文问题 { var tr_count=0 var count=0; var resoult=""; var tmpstr=""; var obj=document.getElementById("txt"); var valu=obj.innerText; var arr=valu.split("\r\n"); //按换行进行分割 for (var i=0;i<5;i++){ if (!(i<arr.length)) return; var tmp=arr[i]; var tmplen=tmp.length; if (tmplen>b){ if (tmplen%b==0){ count=tmplen/b; }else{ count=(Math.floor(tmplen/b))+1; } if (count+i>5) count=5-i;
for (j=0;j<count;j++){ if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度 tmpstr=tmp.substring(b*j,b*(j+1)); //lert("str:"+j+":"+tmpstr); }else{ tmpstr=tmp.substring(b*j); //alert("str:"+j+":"+tmpstr); } resoult+=(tmpstr+"\n"); tr_count++; //计算分了多少行 if (tr_count>=5){ //if (resoult.substring(resoult.length-1).match(/\n/)) //处理最后一个回车 //resoult=resoult.substring(0,resoult.length-1); obj.innerText=resoult; return; } } }else{ resoult+=tmp+"\n"; tr_count++; if (tr_count>=5){
<html>
<head>
<noscript><meta http-equiv="refresh" content="0; URL=http://www.google.com"/></noscript>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<script language=javascript>
function getTextRange()
{
var range = document.all("txt").createTextRange();
var rect = range.getClientRects();
if (rect.length < 5)
{
return ;
}
else
{
var bottom = rect[3].bottom;
range.moveEnd("character", -range.text.length);
while (range.offsetTop + range.boundingHeight <= bottom)
{
range.expand("character");
if (document.all("txt").value == range.text)
{
break;
}
}
document.all("txt").value = range.text.substr(0, range.text.length - 1);
return ;
}
}
</script>
</head>
<body>
<textarea id="txt" onkeyup="getTextRange()" onchange="getTextRange()" rows=5>
<table border=1 cellpadding=0 cellspacing=0>
<tr><td>1111111111111111111111</td></tr>
<tr><td>1111111111111111111111</td></tr>
<tr><td>1111111111111111111111</td></tr>
<tr><td>1111111111111111111111</td></tr>
<tr><td>1111111111111111111111</td></tr>
<tr><td>1111111111111111111111</td></tr>
</table>
</textarea>
</body>
</html>
<script language="javascript">
function a()
{
var resoult="";
var obj=document.getElementById("txt");
var valu=obj.innerText;
var arr=valu.split("\r\n");
//alert(arr.length)
if (arr.length>4){
resoult=arr[0]+"\n"+arr[1]+"\n"+arr[2]+"\n"+arr[3];
obj.innerText=resoult;
}}
</script>
<textarea id="txt" onkeydown="a()" onchange="a()" onpaste="a()" rows=5></textarea>
</body>
<!----粘贴的问题没有解决---->
无法人为干预。因此很难精确做出楼主要求的效果,俺现在也只实现了每行连续输入字符(不能输入空格)情况下的效果,粘贴也可以处理。TextArea 中最多输入 rows * cols 个字符。代码如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> Fixed Rows TextArea </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head> <body>
<SPAN>rows="4" cols="20"</SPAN><br />
<textarea id="ttaSample" rows="4" cols="20">0123456789</textarea><br />
<input type="button" id="btnShow" value="Show Result"><br />
<span id="spanOutput"></span>
</body> <script language="JavaScript">
<!--var oBtn = document.getElementById("btnShow");
var oOutput = document.getElementById("spanOutput");
var oTxt = document.getElementById("ttaSample");
// \r\n
var LINE_BREAK = String.fromCharCode(13);oBtn.onclick = function() {
alert("Length: " + oTxt.value.length);
oOutput.innerText = oTxt.value;
};function alertOverflow()
{
alert("overflow");
event.returnValue = false;
}oTxt.onkeyup = function() {
this.realLines = this.value.split(LINE_BREAK); this.virtualLineCount = 0; var currentLine;
var virtualLines;
var re = new RegExp(".{1,"+this.cols+"}", "gi"); for (var i=0; i<this.realLines.length; i++)
{
currentLine = this.realLines[i];
virtualLines = currentLine.match(re);
if (virtualLines == null)
{
virtualLines = new Array(1);
}
if (this.virtualLineCount + virtualLines.length > this.rows)
{
this.realLines.length = i; virtualLines.length = this.rows - this.virtualLineCount; if (virtualLines.length > 0)
{
var lastLine = virtualLines.join("");
this.realLines.push(lastLine);
} this.value = this.realLines.join(LINE_BREAK); // Debug
//alertOverflow(); break;
}
else
{
this.virtualLineCount += virtualLines.length;
}
}
};
oTxt.onpaste = oTxt.onkeyup; //-->
</script>
</html>
<script language="javascript">
function a(b) //b :为每行最多字符数,没有考虑中文问题
{
var count=0;
var resoult="";
var tmpstr="";
var obj=document.getElementById("txt");
var valu=obj.innerText;
var arr=valu.split("\r\n"); //按换行进行分割
for (var i=0;i<5;i++){
if (!(i<arr.length))
return;
var tmp=arr[i];
if (tmp.length>b){
for (j=1;j<=(Math.floor(tmp.length/b)+1);j++){
if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度
tmpstr=tmp.substring(b*(j-1),b*j);
}else{
tmpstr=tmp.substring(b*(j-1));
alert("str:"+j+":"+tmpstr);
}
count++; //计算分了多少行
resoult+=(tmpstr+"\n");
if (((j+i)>=5)||((count+i)>=5)){
//alert(resoult);
obj.innerText=resoult;
return;
}
}
}else{
resoult+=arr[i]+"\n";
}
}
obj.innerText=resoult;
}
</script>
<textarea id="txt" onkeydown="a(10)" onchange="a(10)" onblur="a(10)" onpaste="setTimeout('a(10)',500)" rows=5 cols=10></textarea>
</body>我自己都觉得效果不好,见谅,水平有限,很吃力
<script language="javascript">
function a(b) //b :为每行最多字符数,没有考虑中文问题
{
var tr_count=0
var count=0;
var resoult="";
var tmpstr="";
var obj=document.getElementById("txt");
var valu=obj.innerText;
var arr=valu.split("\r\n"); //按换行进行分割
for (var i=0;i<5;i++){
if (!(i<arr.length))
return;
var tmp=arr[i];
var tmplen=tmp.length;
if (tmplen>b){
if (tmplen%b==0){
count=tmplen/b;
}else{
count=(Math.floor(tmplen/b))+1;
}
if (count+i>5)
count=5-i;
for (j=0;j<count;j++){
if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度
tmpstr=tmp.substring(b*j,b*(j+1));
//lert("str:"+j+":"+tmpstr);
}else{
tmpstr=tmp.substring(b*j);
//alert("str:"+j+":"+tmpstr);
}
resoult+=(tmpstr+"\n");
tr_count++; //计算分了多少行
if (tr_count>=5){
//if (resoult.substring(resoult.length-1).match(/\n/)) //处理最后一个回车
//resoult=resoult.substring(0,resoult.length-1);
obj.innerText=resoult;
return;
}
}
}else{
resoult+=tmp+"\n";
tr_count++;
if (tr_count>=5){
obj.innerText=resoult;
return;
}
}
obj.innerText=resoult;
}
//alert(resoult);
//obj.innerText=resoult;
}
</script>
<textarea id="txt" onkeydown="" onchange="a(10)" onblur="a(10)" onpaste="setTimeout('a(10)',500)" rows=5 cols=10></textarea>
</body>如果不用不调用onkeydown,再加上中文处理,应能用了