求textarea框ctrl+z为什么无效?

showliz 2008-02-19 06:00:56
之前我提问过一贴子:
http://topic.csdn.net/u/20080105/15/6d88c565-c9c3-494c-a320-ad98b0b14e61.html
已解决贴子的问题,但在我如下的实例仍找不到好办法解决:希望各位达人能再帮忙解决!

<html>
<head>
<title>test</title>
<script language="JavaScript">
<!--
function SymError()
{
return true;
}
window.onerror = SymError;

function changecountbyte(value,length){
var l=strlength(value)
if (l<=length) {
if (document.all!=null) document.all("countbyte").innerText="现在还可以输入"+(length-l)+"字符"
}
else
{
document.all("countbyte").innerText="输入字符数超出范围";
if (window.event.keyCode!=13){
alert('输入字符数超出范围');
}
}
return true
}

function strlength(str){
var l=str.length;
var n=l
for (var i=0;i<l;i++)
{
if (str.charCodeAt(i)<0||str.charCodeAt(i)>255) n++
}
return n
}

function loadFuc(){
var tb = document.getElementById("abc");
tb.onKeyDown = function(){return changecountbyte(document.form1.abc.value,200)};
tb.onkeyup = function(){return changecountbyte(document.form1.abc.value,200)};
}
-->
</SCRIPT>
</head>
<body onLoad="return loadFuc()">
<table width="100%" border="0" cellpadding="0" cellspacing="0" >
<form name=form1 method="post">
<tr>
<td valign="top">
<SPAN id=countbyte><SCRIPT language=JavaScript>changecountbyte(document.form1.abc.value,200);</SCRIPT></SPAN><br />
<textarea name ="abc" cols="80" rows="15" id="abc">asdfsdf</textarea>
</td>
</tr>
</form>
</table>
</body>
</html>
...全文
514 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
showliz 2009-01-08
  • 打赏
  • 举报
回复
不好意思,很久没上来了,谢谢各位达人!结粘
祝各位新年快乐!
  • 打赏
  • 举报
回复
呵呵,解释的很清楚,楼主该满意了!
不过是可以做到计算又可以撤消的^_^
JK_10000 2008-02-20
  • 打赏
  • 举报
回复
刷页面的感觉是因为没有做数字图片预加载处理,预加载一下就没问题了。
不是因为这一点而不推荐。很多dom操作会导致undo丢失,用图片数字浪费资源,也不灵活,还会诱发用户想象力,导致报更多的需求/错误,所以不推荐
showliz 2008-02-20
  • 打赏
  • 举报
回复
好!进去学习学习。
showliz 2008-02-20
  • 打赏
  • 举报
回复
呵呵,测试了,多谢JK_10000兄的解答。
JK兄的第一种方法好像是每输入字符,都有刷页面的感觉,试过把图片换成本地了也一样,所以可能是JS兄强烈不推荐的原因吧。
第二种方法可惜的是缺少即时计算的功能。
JK_10000 2008-02-20
  • 打赏
  • 举报
回复
大多是旧代码,拷过来粘贴上就是。
更多代码在JKHtml里有。
http://topic.csdn.net/u/20080129/09/2cd2a92f-734e-4541-bc8d-3433ba6e0184.html
  • 打赏
  • 举报
回复
哈哈,不过JK_10000 的代码好象少了 <TEXTAREA style="WIDTH: 400px; HEIGHT: 200px" onpropertychange=checkMaxLengthXXXXX(this);> 这个原来的功能
  • 打赏
  • 举报
回复
JK_10000 好象改了他的代码给你了!他做判断了!
呵呵,JK_10000 有心啊,都是直接答案,我只是告诉他思路,让他自己修改!
呵呵
showliz 2008-02-20
  • 打赏
  • 举报
回复
是啊,我觉得应该要在changecountbyte这个函数内进行处理。
showbo所说的已经改变我页面上即时计算textarea字符数的功能了。
JK_10000 2008-02-20
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2900.3268" name=GENERATOR></HEAD>
<BODY>
<HR>
计算长度并且不影响undo。----强烈不推荐<BR><TEXTAREA style="WIDTH: 400px; HEIGHT: 200px" onpropertychange=checkMaxLengthXXXXX(this);></TEXTAREA>

<DIV id=tipDiv>最多可输入100个字符。<SPAN id=tipOk
style="DISPLAY: none">你还可以输入<IMG><IMG><IMG>个。</SPAN> <SPAN id=tipError
style="DISPLAY: none">输入的字符超过100了</SPAN> </DIV>
<SCRIPT>

function checkMaxLengthXXXXX(obj)
{
var l=obj.value.length;
if(l>100){
tipOk.style.display="none";
tipError.style.display="";
}
else{
tipOk.style.display="";
tipError.style.display="none";
var imgs=tipDiv.getElementsByTagName("img");
var l2=100-l;
var imgSrc="http://www.44card.com/images/";
imgs[2].src=imgSrc+(l2%10)+".gif"
imgs[1].src=imgSrc+((l2-l2%10)%100/10)+".gif"
imgs[0].src=imgSrc+((l2-l2%100)%1000/100)+".gif"
}
}
</SCRIPT>

<HR>
推荐用以下类似的方案:<BR><TEXTAREA onblur=checkMaxLength(this,100); style="WIDTH: 400px; HEIGHT: 200px"></TEXTAREA>
<br>最多可输入100个字符。
<SCRIPT>
/**
*checkMaxLength.
*/
function checkMaxLength(textareaObj,maxLength)
{
if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength");
if(maxLength == null) maxLength=1024;
var currentLength = textareaObj.value.length;
if (currentLength > maxLength) {
alert("The length of your input ("+currentLength+") is larger than maxLength ("+maxLength+") .");
if(textareaObj.createTextRange){
var textRange=textareaObj.createTextRange();
var enterMatch=textareaObj.value.substr(0,maxLength).match(/\n/ig);
var enterNum=0;
if(enterMatch) enterNum=enterMatch.length
textRange.moveStart('character',maxLength-enterNum);
textRange.select();
}
else {
textareaObj.focus();
textareaObj.setSelectionRange(maxLength, currentLength);
}
window.latestValidateObj=textareaObj;
setTimeout("window.latestValidateObj.focus();",0);
return false;
}
return true;
}
</SCRIPT>
</BODY></HTML>
  • 打赏
  • 举报
回复
呵呵,没有用的
是他的函数冲突了
必须处理2个函数的关系
单单只有setTextInputValue时很简单!
  • 打赏
  • 举报
回复
JK兄不是已经帮你把type=text的搞好了?套下就得了,不过好象得按2下ctrl+z才能使用undo功能

<textarea  onpropertychange="setTextInputValue(document.all.bbb,this.value);"></textarea>   <textarea  name=bbb>   

</textarea>

<script>
/**
* setTextInputValue
*/
function setTextInputValue(obj,value) // For IE: To keep Undo after change value.
{
if(obj.createTextRange) obj.createTextRange().text=value;
else obj.value=value;
}
</script>
  • 打赏
  • 举报
回复
呵呵,那2个函数冲突了,要坐下判断才行!
加入只有setTextInputValue这函数时就可以,所以你就得获取ctrl状态来判断运行语句
  • 打赏
  • 举报
回复
注意下边的,altKey和altLeft,ctrlKey和ctrlLeft



event 对象

--------------------------------------------------------------------------------

代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。

成员表

下面的表格列出了 event 对象引出的成员。请单击左侧的标签来选择你想要查看的成员类型。

属性

SHOW:
属性
集合
对象
属性 描述
Abstract 使用 event 对象获取高级流重定向器(ASX)文件中项目横幅的 Abstract 内容。
altKey 设置或获取 Alt 键的状态。
altLeft 设置或获取左 Alt 键的状态。
Banner 使用 event 对象获取高级流重定向器(ASX)文件中项目的 Banner 内容。
button 设置或获取用户所按的鼠标按钮。
cancelBubble 设置或获取当前事件是否要在事件句柄中向上冒泡。
clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条。
clientY 设置或获取鼠标指针位置相对于窗口客户区域的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条。
contentOverflow 获取表明文档处理当前 LayoutRect 对象后是否包含附加的内容。
ctrlKey 设置或获取 Ctrl 键的状态。
ctrlLeft 设置或获取左 Ctrl 键的状态。
dataFld 设置或获取 oncellchange 事件影响的数据列。
fromElement 设置或获取事件发生时激活或鼠标将要离开的对象。
keyCode 设置或获取与导致事件的按键关联的 Unicode 按键代码。
MoreInfo 通过 event 对象获取高级流重定向器(ASX)文件中项目横幅的 MoreInfo 内容。
nextPage 获取打印模板中下页的位置。
offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。
offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。
propertyName 设置或获取对象上发生更改的属性名称。
qualifier 设置或获取由数据源对象提供的数据成员的名称。
reason 设置或获取数据源对象的数据传输结果。
recordset 从数据源对象设置或获取对默认数据集的引用。
repeat 获取 onkeydown 事件是否正在重复。
returnValue 设置或获取事件的返回值。
saveType 当 oncontentsave 触发时获取剪贴板类型。
screenX 设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标。
screenY 设置或获取鼠标指针位置相对于用户屏幕的 y 坐标。
shiftKey 设置或获取 Shift 键的状态。
shiftLeft 设置或获取左 Shift 键的状态。
srcElement 设置或获取触发事件的对象。
srcFilter 设置或获取触发 onfilterchange 事件的滤镜对象。
srcUrn 获取触发事件的行为的统一资源名称(URN)。
toElement 设置或获取用户要将鼠标指针移动指向的对象的引用。
type 从 event 对象中获取事件名称。
wheelDelta 设置或获取滚轮按钮滚动的距离和方向。
x 设置或获取鼠标指针位置相对于父文档的 x 像素坐标。
y 设置或获取鼠标指针位置相对于父文档的 y 像素坐标
  • 打赏
  • 举报
回复
套不上去?什么意思?
showliz 2008-02-19
  • 打赏
  • 举报
回复
chinmo,我试过您说的这个方法,但没能找到好的解决办法。就是套不上去哦。
  • 打赏
  • 举报
回复
<input type=text onpropertychange="setTextInputValue(document.all.bbb,this.value);"> <input type=text name=bbb>

<script>
/**
* setTextInputValue
*/
function setTextInputValue(obj,value) // For IE: To keep Undo after change value.
{
if(obj.createTextRange) obj.createTextRange().text=value;
else obj.value=value;
}
</script>

这个可以实现吗?
showliz 2008-02-19
  • 打赏
  • 举报
回复
就是在如上的页面中,不破坏原功能上,解决ctrl+z不能执行取消操作(undo)的问题。
一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的ID的验证) 1.3 负整数的验证 1.4 整数不能大于iMax 1.5 整数不能小于iMin 2、时间类 2.1 短时间,形如 (13:04:06) 2.2 短日期,形如 (2003-12-05) 2.3 长时间,形如 (2003-12-05 13:04:06) 2.4 只有年和月。形如(2003-05,或者2003-5) 2.5 只有小时和分钟,形如(12:03) 3、表单类 3.1 所有的表单的值都不能为空 3.2 多行文本的值不能为空。 3.3 多行文本的值不能超过sMaxStrleng 3.4 多行文本的值不能少于sMixStrleng 3.5 判断单选是否选择。 3.6 判断复选是否选择. 3.7 复选的全选,多选,全不选,反选 3.8 文件上传过程中判断文件类型 4、字符类 4.1 判断字符全部由a-Z或者是A-Z的字字母组成 4.2 判断字符由字母和数字组成。 4.3 判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母 4.4 字符串替换函数.Replace(); 5、浏览器类 5.1 判断浏览器的类型 5.2 判断ie的版本 5.3 判断客户端的分辨率 6、结合类 6.1 email的判断。 6.2 手机号码的验证 6.3 身份证的验证 二、功能类 1、时间与相关控件类 1.1 日历 1.2 时间控件 1.3 万年历 1.4 显示动态显示时钟效果(文本,如OA中时间) 1.5 显示动态显示时钟效果 (图像,像手表) 2、表单类 2.1 自动生成表单 2.2 动态添加,修改,删除下拉中的元素 2.3 可以输入内容的下拉 2.4 多行文本中只能输入iMax文字。如果多输入了,自动减少到iMax个文字(多用于短信发送) 3、打印类 3.1 打印控件 4、事件类 4.1 屏蔽右键 4.2 屏蔽所有功能键 4.3 --> 和<-- F5 F11,F9,F1 4.4 屏蔽组合键ctrl+N 5、网页设计类 5.1 连续滚动的文字,图片(注意是连续的,两段文字和图片中没有空白出现) 5.2 html编辑控件类 5.3 颜色选取控件 5.4 下拉菜单 5.5 两层或多层次的下拉菜单 5.6 仿IE菜单的按钮。(效果如rongshuxa.com的导航栏目) 5.7 状态栏,title栏的动态效果(例子很多,可以研究一下) 5.8 双击后,网页自动滚屏 6、树型结构。 6.1 asp+SQL版 6.2 asp+xml+sql版 6.3 java+sql或者java+sql+xml 7、无边效果的制作 8、连动下拉技术 9、文本排序 10,画图类,含饼、柱、矢量贝滋曲线 11,操纵客户端注册表类 12,DIV层相关(拖拽、显示、隐藏、移动、增加) 13,TABLAE相关(客户端动态增加行列,模拟进度条,滚动列表等) 14,各种<object classid=>相关类,如播放器,flash与脚本互动等 16, 刷新/模拟无刷新 异步调用类(XMLHttp或iframe,frame)

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧