求textarea框ctrl+z为什么无效? 就是在如上的页面中,不破坏原功能上,解决ctrl+z不能执行取消操作(undo)的问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <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> 这个可以实现吗? chinmo,我试过您说的这个方法,但没能找到好的解决办法。就是套不上去哦。 注意下边的,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 像素坐标 呵呵,那2个函数冲突了,要坐下判断才行!加入只有setTextInputValue这函数时就可以,所以你就得获取ctrl状态来判断运行语句 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时很简单! <!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> 是啊,我觉得应该要在changecountbyte这个函数内进行处理。showbo所说的已经改变我页面上即时计算textarea字符数的功能了。 JK_10000 好象改了他的代码给你了!他做判断了!呵呵,JK_10000 有心啊,都是直接答案,我只是告诉他思路,让他自己修改!呵呵 哈哈,不过JK_10000 的代码好象少了 <TEXTAREA style="WIDTH: 400px; HEIGHT: 200px" onpropertychange=checkMaxLengthXXXXX(this);> 这个原来的功能 大多是旧代码,拷过来粘贴上就是。更多代码在JKHtml里有。http://topic.csdn.net/u/20080129/09/2cd2a92f-734e-4541-bc8d-3433ba6e0184.html 呵呵,测试了,多谢JK_10000兄的解答。JK兄的第一种方法好像是每输入字符,都有刷页面的感觉,试过把图片换成本地了也一样,所以可能是JS兄强烈不推荐的原因吧。第二种方法可惜的是缺少即时计算的功能。 刷页面的感觉是因为没有做数字图片预加载处理,预加载一下就没问题了。不是因为这一点而不推荐。很多dom操作会导致undo丢失,用图片数字浪费资源,也不灵活,还会诱发用户想象力,导致报更多的需求/错误,所以不推荐 JAVASCRIPT的底层实现? 判断文本框里鼠标所在位置前面是否是空格 高分求救 javascript如何增减iframe中的table行 关于弹出窗口的问题 点击或设定某行时,显示不同的图片??? 问一个关于函数的概念性的问题 这个程序那里出错? 一个form内有一个叫name的text input,如何区分form的名字(name)和他的叫name的input? 如何获取Firefox浏览器中input类型为file的上传的绝对路径? echart多组数据3D柱状图 关于弹出窗体屏蔽状态栏问题。 邮件发送502 :command not implemented
/**
* 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> 这个可以实现吗?
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 像素坐标
加入只有setTextInputValue这函数时就可以,所以你就得获取ctrl状态来判断运行语句
/**
* 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时很简单!
<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>
showbo所说的已经改变我页面上即时计算textarea字符数的功能了。
呵呵,JK_10000 有心啊,都是直接答案,我只是告诉他思路,让他自己修改!
呵呵
更多代码在JKHtml里有。
http://topic.csdn.net/u/20080129/09/2cd2a92f-734e-4541-bc8d-3433ba6e0184.html
JK兄的第一种方法好像是每输入字符,都有刷页面的感觉,试过把图片换成本地了也一样,所以可能是JS兄强烈不推荐的原因吧。
第二种方法可惜的是缺少即时计算的功能。
不是因为这一点而不推荐。很多dom操作会导致undo丢失,用图片数字浪费资源,也不灵活,还会诱发用户想象力,导致报更多的需求/错误,所以不推荐