• [原创 js] 点击即可修改内容函数


          今天写第一篇,就放一个原创的js函数吧。

          点击即可修改内容,这个功能大家一定都见过吧?下面是我写的一个函数,功能比较全吧。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function changeContent(obj,strNum,oEvent,oWidth,oneLine,blurSave){ 
         if(obj.getElementsByTagName("input").length>0) return;
         function isChinese(s){
          var p = /^[\u0391-\uFFE5]+$/;
          return p.test(s);
         } 
         var textOld=obj.innerHTML;
         if(!blurSave){
          if(oneLine){
           obj.innerHTML="<input type='text' style='220px;' value='"+obj.innerHTML.replace( /^\s*/, "").replace( /\s*$/, "")+"' /><input type='button' value='保存' class='sendBtn2' style='padding:0px;' /><input type='button' value='取消' class='sendBtn2' style='padding:0px;' />";
           var save=obj.getElementsByTagName("input")[1];
           var cancel=obj.getElementsByTagName("input")[2];
          } else {
           obj.innerHTML="<textarea style='250px;height:50px;'>"+obj.innerHTML.replace( /^\s*/, "").replace( /\s*$/, "")+" </textarea><br /><input type='button' value='保存' class='sendBtn2' style='padding:0px;' /><input type='button' value='取消' class='sendBtn2' style='padding:0px;' />"; 
           var save=obj.getElementsByTagName("input")[0];
           var cancel=obj.getElementsByTagName("input")[1];
          }
         }else{
          if(oneLine){
           obj.innerHTML="<input type='text' style='220px;' value='"+obj.innerHTML.replace( /^\s*/, "").replace( /\s*$/, "")+"' />";
          } else {
           obj.innerHTML="<textarea style='250px;height:50px;'>"+obj.innerHTML.replace( /^\s*/, "").replace( /\s*$/, "")+" </textarea>"; 
          }
         }
         var text; 
         if(oneLine){
          text=obj.getElementsByTagName("input")[0];
         } else {
          text=obj.getElementsByTagName("textarea")[0]; 
         }
         if(typeof oWidth == "number"){
          text.style.width=oWidth+"px"; 
         }
         text.select();
         text.onclick=function(oevent){
          if(document.all) window.event.cancelBubble=true;
          else oevent.stopPropagation(); 
         }
         if(!blurSave){
          save.onclick=function(oevent){
           if(text.value.replace( /^\s*/, "").replace( /\s*$/, "")==""){
            obj.innerHTML=textOld;
           }else{
            obj.innerHTML=text.value;
            obj.innerHTML=obj.innerHTML.replace(/</ig,"&lt;");
            obj.innerHTML=obj.innerHTML.replace(/>/ig,"&gt;");
            if(strNum){
             for(var i=0;i<strNum;i++){
              if(isChinese(obj.innerHTML.charAt(i))) strNum--;
             }
             obj.innerHTML=obj.innerHTML.substring(0,strNum);
            }
            if(typeof oEvent == "string"){
             try {eval(oEvent);}
             catch (e) {}
            }
            if(typeof oEvent == "function"){
             oEvent();
            }
            if(document.all) window.event.cancelBubble=true;
            else oevent.stopPropagation();
           }
           obj.style.background="transparent";
          }
          cancel.onclick=function(oevent){
           obj.innerHTML=textOld;
           obj.style.background="transparent";
           if(document.all) window.event.cancelBubble=true;
           else oevent.stopPropagation(); 
          }
         }else{
          text.onblur=function(){
           if(text.value.replace( /^\s*/, "").replace( /\s*$/, "")==""){
            obj.innerHTML=textOld;
           }else{
            obj.innerHTML=text.value;
            obj.innerHTML=obj.innerHTML.replace(/</ig,"&lt;");
            obj.innerHTML=obj.innerHTML.replace(/>/ig,"&gt;");
            if(strNum){
             for(var i=0;i<strNum;i++){
              if(isChinese(obj.innerHTML.charAt(i))) strNum--;
             }
             obj.innerHTML=obj.innerHTML.substring(0,strNum);
            }
            if(typeof oEvent == "string"){
             try {eval(oEvent);}
             catch (e) {}
            }
            if(typeof oEvent == "function"){
             oEvent();
            }
           }
           obj.style.background="transparent";
          }
         }
    }
    </script>
    </head>
    <body>
    <p onclick="var obj=this; changeContent(this,20,'alert(obj.innerHTML)','',true,true)">

    我是阿当 ^0^
    </p>

    <p onclick="var obj=this; changeContent(this,20,'alert(obj.innerHTML)','',false,true)">

    我是阿当 ^0^
    </p>

    <p onclick="var obj=this; changeContent(this,20,'alert(obj.innerHTML)','',false,false)">

    我是阿当 ^0^
    </p>

    <p onclick="var obj=this; changeContent(this,20,'alert(obj.innerHTML)','',true,false)">

    我是阿当 ^0^
    </p>

    <p onclick="var obj=this; changeContent(this,60,'alert(obj.innerHTML)','',true,false)">
    我是阿当 ^0^
    </p>
    </body>
    </html>

    =======================================================================

    函数有五个参数:
    obj                 要执行修改的DOM对象,
    strNum       修改后,允许保留的最大值字符数,中文算两个字符,类型为数字, 
    oEvent       执行修改后的回调函数,可以写成字符串形式,或者function(){}形式,例如"alert('我是阿当');",或者function(){alert("我是阿当");}
    oWidth       输入框的长度,类型为数字。如果不设置,则使用默认值,
    oneLine 输入框是否单行,类型为布尔值,为true表示单行,false表示多行。如果不设置,默认为多行显示,
    blurSave 设置保存形式,类型为布尔值,如果为true表示输入框失去焦点即可保存,为false表示点击保存按钮保存内容。

    因为一般情况下,点击即可修改内容是通过ajax方式提交的,那么我们需要得到修改后的内容,在oEvent参数中发送到服务器端。那么我们如何得到修改后的值呢?
    <p onclick="var obj=this; changeContent(this,20,'alert(obj.innerHTML)','',true,true)">
    我是阿当 ^0^
    </p>
    我们只要在调用changeContent()前,写下var obj=this,就可以在oEvent位置通过obj.innerHTML得到修改后的值。我们可以在这里写下<p onclick="var obj=this; changeContent(this,20,'sendAjax(obj.innerHTML)','',true,true)">).

    如果要将行为分离出来也非常容易,只要写成下面的形式:
    var obj=document.getElementById("XXX");
    changeContent(obj,20,'alert(obj.innerHTML)','',true,true);

  • 相关阅读:
    关于隐藏UITabBarController和UINavigationController
    Google地图根据地址查询经纬度坐标
    领域驱动设计
    MFMessageComposeViewController
    关于什么时候使用NMock
    博客园现代化建设—[Entity Framework]在LINQ查询中指定返回的字段
    真相大白:为什么Entity Framework不能进行跨数据库查询(附解决方法)
    新问题新方法:在Entity Framework中实现指定字段更新
    分享我对领域驱动设计(DDD)的学习成果
    (转)js去空格
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427222.html
Copyright © 2020-2023  润新知