就是在如上的页面中,不破坏原功能上,解决ctrl+z不能执行取消操作(undo)的问题。

解决方案 »

  1.   

    <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> 这个可以实现吗?
      

  2.   

    chinmo,我试过您说的这个方法,但没能找到好的解决办法。就是套不上去哦。
      

  3.   

    注意下边的,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   像素坐标
      

  4.   

    呵呵,那2个函数冲突了,要坐下判断才行!
    加入只有setTextInputValue这函数时就可以,所以你就得获取ctrl状态来判断运行语句
      

  5.   

    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> 
      

  6.   

    呵呵,没有用的
    是他的函数冲突了
    必须处理2个函数的关系
    单单只有setTextInputValue时很简单!
      

  7.   

    <!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>
      

  8.   

    是啊,我觉得应该要在changecountbyte这个函数内进行处理。
    showbo所说的已经改变我页面上即时计算textarea字符数的功能了。
      

  9.   

    JK_10000 好象改了他的代码给你了!他做判断了!
    呵呵,JK_10000 有心啊,都是直接答案,我只是告诉他思路,让他自己修改!
    呵呵
      

  10.   

    哈哈,不过JK_10000 的代码好象少了 <TEXTAREA   style="WIDTH:   400px;   HEIGHT:   200px"   onpropertychange=checkMaxLengthXXXXX(this);> 这个原来的功能
      

  11.   

    大多是旧代码,拷过来粘贴上就是。
    更多代码在JKHtml里有。
    http://topic.csdn.net/u/20080129/09/2cd2a92f-734e-4541-bc8d-3433ba6e0184.html
      

  12.   

    呵呵,测试了,多谢JK_10000兄的解答。
    JK兄的第一种方法好像是每输入字符,都有刷页面的感觉,试过把图片换成本地了也一样,所以可能是JS兄强烈不推荐的原因吧。
    第二种方法可惜的是缺少即时计算的功能。
      

  13.   

    刷页面的感觉是因为没有做数字图片预加载处理,预加载一下就没问题了。
    不是因为这一点而不推荐。很多dom操作会导致undo丢失,用图片数字浪费资源,也不灵活,还会诱发用户想象力,导致报更多的需求/错误,所以不推荐