呵呵,前些天刚刚较深入研究了一下 TextArea ,这个问题应该不难!LZ 给俺 88 分就行了,哈
解决方案 »
- js中判断2个字符串相等的问题
- 点击button弹出子窗口
- 网页整体大小是采用100%的,<iframe style="width:100%;height:100%;scrolling:auto">会有滚动条,怎么能设置为自动的?
- 该如何实现这样的效果?:向文本框中输入内容时不出现提示,
- 一个window.open的疑问续集
- 简单问题:ASP中的Application怎么用?
- 达人指点:iFrame访问不了客户端的本地文件?
- 如何当输入完毕后立即作出判断??
- 有什么好的javascript编辑器?请给个下载地址。
- ajaxpost提交怎么避免url自动加上参数
- 高分求:用js如何把一个excel表格另存为html格式
- 我这样用JS复制内容,请问怎样去掉后面的多余空格?
<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,再加上中文处理,应能用了