标签归档:js

怎样将用户名和密码保存到Cookie中[转]

    在网站中,我们经常看到每当我们准备登陆时,网页询问我们是否保存用户名和密码,以便下次登陆时不用再次输入。诸如此类的功能如何实现哪?经过两天的研究,终于有了收获!现将我的经验与大家分享。
    在网页中记录用户的信息通常有如下几种方式:Session、Cookie、以及.Net环境下的ViewState等。比较起来,Session将用户的信息暂存在内存中,除非用户关闭网页,否则信息将一直有效。所以,用Session保存的信息很容易丢失。Cookie用来将用户的信息保存到用户机的文件中,这样信息就可以长久的保存。前两种都是传统的保存方式,而ViewState是在微软.Net环境下新推出的一种对象,它其实是一种特殊的Session,不过一般将信息保存在客户端。关于ViewState的用法大家可以参考一些资料,我在《谨慎Asp.net中static变量的用法》一文中也有叙述。
    下面我将以用户名和密码为例介绍如何通过Cookie保存用户的信息。
    因为Cookie是通过计算机上的文件来记录有关信息,所以涉及到对Cookie的操作无外乎读取、赋值和删除。另外,由于Cookie提供了一项有效期的功能,所以还可以对Cookie设置有效期。下面将在DHTML和VS.Net两种环境下分别介绍如何实现Cookie的各种操作。
    一、DHTML环境
    这种环境下我们使用的是传统的JavaScript脚本,通过对页面中各种对象的属性和事件进行操作来完成我们的预期任务。
    1、读取Cookie值
    Cookie值是按照索引存储的,也就是说不同的索引有不同的Cookie值。所以我们就可以将我们想要存储的对象(在这里为用户名)作为索引,读取该存储对象的Cookie值。方法如下:

    function GetCookie (name)
    {
       var arg = name + “=”;
       var alen = arg.length;
       var clen = window.document.cookie.length;
       var i = 0;
       while (i < clen)
       {
            var j = i + alen;
            if (window.document.cookie.substring(i, j) == arg) return getCookieVal (j);
                i = window.document.cookie.indexOf(” “, i) + 1;
            if (i == 0)
                break;
        }
        return null;
    }

 

 function getCookieVal (offset)
    {
        var endstr = window.document.cookie.indexOf (“;”, offset);
        if (endstr == -1)
            endstr = window.document.cookie.length;
        return unescape(window.document.cookie.substring(offset, endstr));
    }

    为什么读取Cookie值还要两个函数来完成?这是因为Cookie值是按照“Cookie名;”+“Cookie值;”+“有效期;”+“路径”的格式来存储的。这将在下文中提到。这样初次读到的Cookie是一连串的以分号分隔的字符串。我们还需要对其进行进一步处理才能提取出我们想要的信息。在上面两个函数中,第一个函数GetCookie用来按索引获取我们想要读取的Cookie的位置,第二个函数getCookieVal用来提取Cookie中我们想要的信息。所以使用时直接调用GetCookie(name)就可以了,其中name是Cookie的索引,也就是名称,或者直接点说就是我们要存储其值的东西。
    2、设置Cookie值
    正如上面所说,Cookie的存取方式有点类似于哈希表,是以名称作为索引存取的。一个Cookie的格式如下:
 Cookie名称(作为Cookie的索引便于以后的各种操作)+“=”+Cookie值+“;expires=+有效期+“;path=”+路径+“;domain=”+域+“;secure=”+安全级别
    可以看出每个Cookie实际有6个属性,这些属性恰好构成了一条记录。多条Cookie记录在硬盘中是以集合的方式存取的。也就是说所有Cookie记录构成了类似于一张表的结构。而Cookie又可以有多个集,那时不是就可以理解成一个库哪?这里不去讲解怎么样以表或库的方式读写Cookie记录集,只是讲解基本的Cookie操作。并且我还没有发现真正有把Cookie集合当成表一样的专门操作方法。毕竟,以表的方式理解Cookie集合只是我的一家之言,仅供大家理解上的方便。
    正因为每个Cookie实际上是有多个属性组成的,所以设置Cookie时理所当然地应该设置多个属性值,虽然不是每一个属性都必须填写,但大家至少应该把Cookie名称和Cookie值填上,否则这个Cookie就没有任何意义了。设置一个Cookie值的方法如下:

    function SetCookie (name, value)
    {
        var exp = new Date();
        exp.setTime(exp.getTime() + (30*24*60*60*1000));
        window.document.cookie = name + “=” + escape (value) + “; expires=” + exp.toGMTString()+”;path=/”;
    }

    其中,name为Cookie的名称,value为Cookie的值。如果还想指定Cookie的有效期,再传入一个时间参数就可以了,不过要注意这里的时间是以毫秒计算的,所以如果要设置日月年等长时间时要进行计算。需要注意的是如果Cookie的名称和值中含有汉字的话,最好事先对其进行编码,否则可能显示结果不会很理想。
  3、删除Cookie
    这么叫也许并不恰当,因为以下的介绍名没有真正的删除Cookie。我们就勉强这么叫吧。上面说每一个Cookie都有一个有效期,过了这个有效期该Cookie就会失效,获取到的Cookie值将为空(null),使用该Cookie的值将会出错。所以如果要删除某个Cookie的话,只要让其过期就可以了。所以删除Cookie的操作就是让其过期的操作:

    function DeleteCookie (name)
    {
        var exp = new Date();
        exp.setTime (exp.getTime() – 1);
        var cval = GetCookie (name);
         window.document.cookie = name + “=” + cval + “; expires=” + exp.toGMTString()+”;path=/”;
    }

    有上述代码也可以看出,删除操作其实就是让某个Cookie的有效期设置为当前时间减去1毫秒,当然会过期了!
    那么如何将上述代码应用到DHTML的开发过程中哪?下面就以记录用户名和密码到Cookie中为例进行讲解。
    为了简单起见,我们只在页面中放置一个用户名文本域、一个密码域、一个按钮和一个复选框。页面的布局代码如下:

    <html>
    <head>
    <title>记录用户名和密码到Cookie中</title>
    </head>
    <body>
    请输入用户名:<input type=”text”><br>
    请输入密码:<input type=”password”>&nbsp;&nbsp;&nbsp;&nbsp;<input type=”checkbox”>记住用户名和密码<br>
    <input value=”记录” type=”button”>&nbsp;&nbsp;&nbsp;&nbsp;<input value=”删除” type=”button”>
    </body>
    </html>

    下面就开始完成功能代码的编写。本来用户单击“确定”按钮后要对用户名和密码进行验证,并且进入相关页面,我们在这里换成记录用户名和密码的功能。
    将上述三个Cookie的函数粘贴到html代码的<head>和</head>之间(不要放在<title>和</title>之间),然后在<input value=”记录” type=”button”>中添加一个单击事件处理程序:<input value=”记录” type=”button” >。在<head>和</head>之间实现remember()函数:

function remember()
    {
       if(document.all.remem.checked)
       SetCookie(document.all.username.value,document.all.password.value);
    }

    这样就可以在用户单击了“记录”按钮后将用户名和对应的密码记录到Cookie中。
    那么如何在用户输入用户名后自动填入对应的密码哪?这就要在<input type=”text”>中添加一个事件处理函数:<input type=”text” >。然后把showpassword()的定义同样放到<head>和</head>之间:
  

  function showpassword()
    {
        return GetCookie(document.all.username.value);
    }

    以上就完成了对特定用户密码的记录。下面我们完成密码的删除部分。在<input value=”删除” type=”button”>中添加一个事件处理函数:<input value=”删除” type=”button” >。然后在<head>和</head>之间实现DelCookie()函数:

    function DelCookie()
    {
        DeleteCookie(document.all.username.value);
    }

    现在大家可以试验一下,看看预期的功能可否实现。如果大家试验过后就会发现,当我们删除掉某个用户的密码后,每次焦点从username中移出时,password中总是显示四个掩码,而不是空,这是为什么哪?如果大家用alert()语句把文本框中的内容输出的话,就会发现那四个掩码其实是“null”这个单词。这就表明其实已经删除了,但我们显示密码时没有排除这种情况。所以在showpassword()函数中应进行判断,非空后再把结果赋给password域:

    function showpassword()
    {
         var p=GetCookie(document.all.username.value);
         if(p!=null)
             document.all.password.value= p;
    }

    好了,大功告成。完整的代码如下所示:

    <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
    <html>
    <head>
    <title>演示例子</title>
    <script>
    function GetCookie (name)
    {
        var arg = name + “=”;
        var alen = arg.length;
        var clen = window.document.cookie.length;
        var i = 0;
        while (i < clen)
        {
            var j = i + alen;
            if (window.document.cookie.substring(i, j) == arg) return getCookieVal (j);
            i = window.document.cookie.indexOf(” “, i) + 1;
            if (i == 0)
                break;
        }
        return null;
    }
    function getCookieVal (offset)
    {
        var endstr = window.document.cookie.indexOf (“;”, offset);
        if (endstr == -1)
            endstr = window.document.cookie.length;
        return unescape(window.document.cookie.substring(offset, endstr));
    }
    function SetCookie (name, value)
    {
        var exp = new Date();
        exp.setTime(exp.getTime() + (30*24*60*60*1000));
        window.document.cookie = name + “=” + escape (value) + “; expires=” + exp.toGMTString()+”;path=/”;
    }
    function DeleteCookie (name)
    {
        var exp = new Date();
        exp.setTime (exp.getTime() – 100);
        var cval = GetCookie (name);
        window.document.cookie = name + “=” + cval + “; expires=” + exp.toGMTString()+”;path=/”;
    }

    function DelCookie()
    {
        DeleteCookie(document.all.username.value);
    }
    function remember()
    {
        if(document.all.remember.checked)
            SetCookie(document.all.username.value,document.all.password.value);
    }
    function showpassword()
    {
         var p=GetCookie(document.all.username.value);
         if(p!=null)
             document.all.password.value= p;
    }
    </script>
    </head>
    <body>
    请输入用户名:<input type=”text” ><br>
    请输入密码:<input type=”password”>&nbsp;&nbsp;&nbsp;&nbsp;<input type=”checkbox”>记住密码  

<br>
    <input value=”记录” type=”button” >&nbsp;&nbsp;&nbsp;&nbsp;<input value=”删除” type=”button”    

onClick=”DelCookie()”>
    </body>
    </html>

    二、.Net环境
    .Net以其强大的功能而著称。所以在.Net中提供了许多针对Cookie的类,可以很方便地完成对Cookie的各类操作。在.Net中有一个类HttpCookie,这个类中保存了Cookie的全部信息,包括Cookie名称、Cookie值、有效期等。我们在使用时先新建一个HttpCookie的对象,然后用Response.Cookies下的方法来操作这个对象就可以了。
    声明一个HttpCookie对象的方法为:

HttpCookie cookiename = new HttpCookie(Cookie的名称, Cookie的值);

其中,cookiename是对象名。然后,我们就可以为cookiename的各个属性赋值。
    当向系统中添加该Cookie时只要用

Response.AppendCookie(cookiename);

就可以了,或者用

Response.Cookies.Add(cookiename);

读取Cookie时用

Response.Cookies.Get(Cookie名称);

删除Cookie时用

Response.Cookies.Remove(Cookie名称);

但我试了一下,删不掉。所以还是用以前的思路,把该Cookie的有效期设置为过时就可以了,方法如下:
 

    HttpCookie ckUserInfo = Request.Cookies[txtUserName.Text.Trim()];
    ckUserInfo.Expires = DateTime.Today.AddDays(-1);
    Response.Cookies.Set(ckUserInfo);

    以上操作就可以完成Cookie的基本操作。因为我还想实现当用户输完用户名后把焦点从用户名框转移到密码框时自动在密码框中输出该用户对应的密码,所以还得增加一个javascript处理函数showpassword()。这个函数完全和上面DHTML中的showpassword()一样。所以,在.Net中完全可以使用以前DHTML中的方法。我们只要在页面导入时为用户名框添加一个onblur属性即可。Login.aspx的代码如下:

    <%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”login.aspx.cs” Inherits=”login” %>

    <!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 runat=”server”>
        <title>无标题页</title>
    </head>
    <script>
        function GetCookie (name)
        {
     var arg = name + “=”;
     var alen = arg.length;
     var clen = window.document.cookie.length;
     var i = 0;
     while (i < clen)
     {
          var j = i + alen;
          if (window.document.cookie.substring(i, j) == arg) return getCookieVal (j);
          i = window.document.cookie.indexOf(” “, i) + 1;
          if (i == 0)
               break;
     }
     return null;
        }
        function getCookieVal (offset)
        {
             var endstr = window.document.cookie.indexOf (“;”, offset);
             if (endstr == -1)
                  endstr = window.document.cookie.length;
             return unescape(window.document.cookie.substring(offset, endstr));
        }
        function showpassword()
        {
             var p=GetCookie(document.all.txtUserName.value);
             if(p!=null)
                 document.all.txtPassword.value= p;
        }
    </script>
    <body>
        <form runat=”server”>
        <div>
            请输入用户名:<asp:TextBox runat=”server”></asp:TextBox><br />
            请输入密码: &nbsp; &nbsp;<asp:TextBox runat=”server” TextMode=”Password”
                Width=”149px”></asp:TextBox>&nbsp;<asp:CheckBox runat=”server” Text=”记住用户名和密码” /><br />
            &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<asp:Button runat=”server”
                Text=”记录” />
            <asp:Button runat=”server” Text=”删除” />
   
        </div>
        </form>
    </body>
    </html>

    Login.aspx.cs的代码如下:

    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

      {
        protected void Page_Load(object sender, EventArgs e)
        {
            txtUserName.Attributes.Add(“onblur”, “showpassword()”);
        }

        protected void  btnRem_Click(object sender, EventArgs e)
        {
            if (chkRem.Checked)
            {
                HttpCookie ckUserInfo = new HttpCookie(txtUserName.Text.Trim(), txtPassword.Text);
                ckUserInfo.Expires = DateTime.Now.AddYears(1);
                Response.AppendCookie(ckUserInfo);
            }
        }
        protected void btnDel_Click(object sender, EventArgs e)
        {
            HttpCookie ckUserInfo = Request.Cookies[txtUserName.Text.Trim()];
            ckUserInfo.Expires = DateTime.Today.AddDays(-1);
            Response.Cookies.Set(ckUserInfo);
        }
    }

    好了,大功全部告成。如果大家还想进行更高级的操作的话,可以用这些基本功能进行开发,思路都是一样的。有什么更好的思路可以提出来,我们共同交流。

 

HTML 4.0 事件属性

      HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript。

      在现代浏览器中都内置有大量的事件处理器。这些处理器会监视特定的条件或用户行为,例如鼠标单击或浏览器窗口中完成加载某个图像。通过使用客户端的 JavaScript,可以将某些特定的事件处理器作为属性添加给特定的标签,并可以在事件发生时执行一个或多个 JavaScript 命令或函数。

      事件处理器的值是一个或一系列以分号隔开的 Javascript 表达式、方法和函数调用,并用引号引起来。当事件发生时,浏览器会执行这些代码。例如,当您把鼠标移动到一个超链接时,会启动一个 JavaScript 函数。支持 JavaScript 的浏览器支持 <a> 标签中的一个特殊的 “mouse over”事件处理器 – 被称为 onmouseover 来完成这项工作:

<a href=”#” onmouseover=”alert(‘Welcome’);return false”></a>

移动这里 –弹出属性测试

窗口事件 (Window Events)
仅在 body 和 frameset 元素中有效。

属性                   值                       描述
onload              脚本                    当文档载入时执行脚本
onunload          脚本                    当文档卸载时执行脚本

表单元素事件 (Form Element Events)
仅在表单元素中有效。

属性                   值                            描述
onchange           脚本                       当元素改变时执行脚本
onsubmit             脚本                       当表单被提交时执行脚本
onreset               脚本                       当表单被重置时执行脚本
onselect              脚本                       当元素被选取时执行脚本
onblur                 脚本                       当元素失去焦点时执行脚本
onfocus               脚本                       当元素获得焦点时执行脚本

图像事件 (Image Events)
该属性可用于 img 元素:

属性                   值                          描述
onabort             脚本                         当图像加载中断时执行脚本

键盘事件 (Keyboard Events)
在下列元素中无效:base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, 以及 title 元素。

属性                       值                      描述
onkeydown             脚本                 当键盘被按下时执行脚本
onkeypress             脚本                当键盘被按下后又松开时执行脚本
onkeyup                 脚本                  当键盘被松开时执行脚本

鼠标事件 (Mouse Events)
在下列元素中无效:base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, title 元素。

属性                           值                          描述
onclick                       脚本                       当鼠标被单击时执行脚本
ondblclick                  脚本                        当鼠标被双击时执行脚本
onmousedown           脚本                        当鼠标按钮被按下时执行脚本
onmousemove           脚本                      当鼠标指针移动时执行脚本
onmouseout              脚本                        当鼠标指针移出某元素时执行脚本
onmouseover            脚本                        当鼠标指针悬停于某元素之上时执行脚本
onmouseup               脚本                        当鼠标按钮被松开时执行脚本
 

 

 

 

兼容firefox3,ie,firefox2的xmlhttp请求写法(转载未测)

最近安装了firefox3以后突然发现之前写的一些ajax请求无法正常的去获取数据了。于是赶快从网上找解决方法。终于在一个僻静的小角落找到了解决方法。马上写出共享之~积德啊积德~”

//创建xmlhttp。此写法兼容firefox2,firefox3和ie。
function createXMLHTTP() {
var xmlhttp = null;
if(window.ActiveXObject) {
try {xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch(e){}}
} else if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
if(xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType('text/xml');
}
} else {alert("Create XMLHttpRequest object false!");return false;}
return xmlhttp;
}

//调用处写法:
var xmlhttp = createXMLHTTP();
xmlhttp.open("GET","your request url",false);
xmlhttp.send(null);
if(xmlhttp.status == 200) {
if(xmlhttp.responseText.length !== 0) {
//此判断的内容为以前的回调函数。不明白为啥firefox3就成了这个样子~
}

JS 的基本知识整理

1.document.write(“”); 输出语句  
2.JS中的注释为//  
3.传统的HTML文档顺序是:document->html->(head,body)  
4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)  
5.得到表单中元素的名称和值:document.getElementById(“表单中元素的ID号”).name(或value)  
6.一个小写转大写的JS: document.getElementById(“output”).value = document.getElementById(“input”).value.toUpperCase();  
7.JS中的值类型:String,Number,Boolean,Null,Object,Function  
8.JS中的字符型转换成数值型:parseInt(),parseFloat()  
9.JS中的数字转换成字符型:(“”+变量)  
10.JS中的取字符串长度是:(length)  
11.JS中的字符与字符相连接使用+号.  
12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=  
13.JS中声明变量使用:var来进行声明  
14.JS中的判断语句结构:if(condition){}else{}  
15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}  
16.循环中止的命令是:break 
17.JS中的函数定义:function functionName([parameter],…){statement[s]}  
18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.  
19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self  
20.状态栏的设置:window.status=”字符”;  
21.弹出提示信息:window.alert(“字符”);  
22.弹出确认框:window.confirm();  
23.弹出输入提示框:window.prompt();  
24.指定当前显示链接的位置:window.location.href=”URL” 
25.取出窗体中的所有表单的数量:document.forms.length  
26.关闭文档的输出流:document.close();  
27.字符串追加连接符:+=  
28.创建一个文档元素:document.createElement(),document.createTextNode()  
29.得到元素的方法:document.getElementById()  
30.设置表单中所有文本型的成员的值为空:  
var form = window.document.forms[0]  
for (var i = 0; i<form.elements.length;i++){  
      if (form.elements[i].type == “text”){  
          form.elements[i].value = “”;  
      }  
}  
31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)  
32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length  
33.单选按钮组判断是否被选中也是用checked.  
34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)  
35.字符串的定义:var myString = new String(“This is lightsword”);  
36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();  
37.返回字符串2在字符串1中出现的位置:String1.indexOf(“String2”)!=-1则说明没找到.  
38.取字符串中指定位置的一个字符:StringA.charAt(9);  
39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);  
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在 值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor (Math.random()*(n+1))返回随机数  
41.定义日期型变量:var today = new Date();  
42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份, dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到 日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分, dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设 置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设 置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds (val)设置秒   [注意:此日期时间从0开始计]  
43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames[“frameName”].ObjFuncVarName,frameName.ObjFuncVarName  
44.parent代表父亲对象,top代表最顶端对象  
45.打开子窗口的父窗口为:opener  
46.表示当前所属的位置:this 
47.当在超链接中调用JS函数时用:(javascript:)来开头后面加函数名  
48.在老的浏览器中不执行此JS:<!–       //–>  
49.引用一个文件式的JS:<script type=”text/javascript” src=”aaa.js”></script>  
50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript>  
51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href= “a.html” onclick=”location.href=’b.html’;return false”>dfsadf</a>  
52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number, Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError  
53.JS中的换行:\n  
54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0); this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script>  
55.JS中的all代表其下层的全部元素   
 
56.JS中的焦点顺序:document.getElementByid(“表单元素”).tabIndex = 1 
57.innerHTML的值是表单元素的值:如<p id=”para”>”how are <em>you< /em>”</p>,则innerHTML的值就是:how are <em>you</em>  
58.innerTEXT的值和上面的一样,只不过不会把<em>这种标记显示出来.  
59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.  
60.isDisabled判断是否为禁止状态.disabled设置禁止状态  
61.length取得长度,返回整型数值  
62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc  
63.window.focus()使当前的窗口在所有窗口之前.  
64.blur()指失去焦点.与FOCUS()相反.  
65.select()指元素为选中状态.  
66.防止用户对文本框中输入文本:onfocus=”this.blur()” 
67.取出该元素在页面中出现的数量:document.all.tags(“div(或其它HTML标记符)”).length  
68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()  
69.状态栏文字的设置:window.status=’文字’,默认的状态栏文字设置:window.defaultStatus = ‘文字.’;  
70.添加到收藏夹:external.AddFavorite(“http://www.k686.com”,”jaskdlf”);  
71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;  
72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener…的多重继续.  
73.JS中的self指的是当前的窗口  
74.JS中状态栏显示内容:window.status=”内容” 
75.JS中的top指的是框架集中最顶层的框架  
76.JS中关闭当前的窗口:window.close();  
77.JS中提出是否确认的框:if(confirm(“Are you sure?”)){alert(“ok”);}else{alert(“Not Ok”);}  
78.JS中的窗口重定向:window.navigate(“http://www.k686.com”);  
79.JS中的打印:window.print()  
80.JS中的提示输入框:window.prompt(“message”,”defaultReply”);  
81.JS中的窗口滚动条:window.scroll(x,y)  
82.JS中的窗口滚动到位置:window.scrollby  
83.JS中设置时间间隔:setInterval(“expr”,msecDelay)或setInterval(funcRef,msecDelay)或setTimeout  
84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog(“URL”[,arguments][,features]);  
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue= “we really like you and hope you will stay longer.”;}}   window.onbeforeunload=verifyClose;  
86.当窗体第一次调用时使用的文件句柄:onload()  
87.当窗体关闭时调用的文件句柄:onunload()  
88.window.location的属性: protocol(http:),hostname(www.k686.com),port(80),host(www.k686.com:80),pathname(“/a/a.html”),hash(“#giantGizmo”,指跳转到相应的锚记),href(全部的信息)  
89.window.location.reload()刷新当前页面.  
89-1.parent.location.reload()刷新父亲对象(用于框架)  
89-2.opener.location.reload()刷新父窗口对象(用于单开窗口)  
89-3.top.location.reload()刷新最顶端对象(用于多开窗口)  
90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)  
91.document.write()不换行的输出,document.writeln()换行输出  
92.document.body.noWrap=true;防止链接文字折行.  
93.变量名.charAt(第几位),取该变量的第几位的字符.  
94.”abc”.charCodeAt(第几个),返回第几个字符的ASCii码值.  
95.字符串连接:string.concat(string2),或用+=进行连接  
96.变量.indexOf(“字符”,起始位置),返回第一个出现的位置(从0开始计算)  
97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.  
98.string.match(regExpression),判断字符是否匹配.  
99.string.replace(regExpression,replaceString)替换现有字符串.  
100.string.split(分隔符)返回一个数组存储值.  
101.string.substr(start[,length])取从第几位到指定长度的字符串.  
102.string.toLowerCase()使字符串全部变为小写.  
103.string.toUpperCase()使全部字符变为大写.  
104.parseInt(string[,radix(代表进制)])强制转换成整型.  
105.parseFloat(string[,radix])强制转换成浮点型.  
106.isNaN(变量):测试是否为数值型.  
107.定义常量的关键字:const,定义变量的关键字:var  
108.isNaN()是JavaScript 的内部函数,对参数进行运算,判断其是否为非数字。若参数为NaN  
(注释:非数值值),则返回true;否者返回false;parseInt 也是一个JavaScript 的内部函数,分析一个  
字符串,并返回给定基数或底数的一个整数(若没有给定基数,则假定基数为10)。

JS面向对象

<html>  
<head>  
      
</head>  
<body>  
    <button onclick=”person1.introduce()”>person1</button>  
    <button onclick=”person2.introduce()”>person2</button>  
    <button onclick=”person3.introduce()”>person3</button>  
    <button onclick=”person4.introduce()”>person4</button>  
    <button onclick=”checkFunc()”>checkFunc</button>  
    <button onclick=”checkFuncByProto()”>checkFuncByProto</button><br/>  
    <button onclick=”testCnstrct()”>testCnstrct</button>  
    <button onclick=”testCnstrctpttp()”>testCnstrctpttp</button>  
    <button onclick=”testDbproto()”>testDbproto</button>  
    <button onclick=”JSONFontI()”>JSONFontI</button>  
    <button onclick=”JSONFontII()”>JSONFontII</button><br/>  
    <button onclick=”testFactory()”>testFactory</button>  
    <button onclick=”testAbstractFactory()”>testAbstractFactory</button>  
      
    <script>  
        var name = “1111111111” 
          
          
          
        /********************************************/ 
        /* 第一种构建对象的办法*/ 
        /* ***推断***,{}即为对象.*/ 
        /********************************************/ 
        var person1 = {};  
        person1.name = “junzi”;  
        person1.age = 23;  
        person1.introduce = function () {  
            alert(“My name is ” + this.name + “.I’m ” + this.age);  
        };  
          
          
          
        /********************************************/ 
        /* 第二种构建对象的办法,类似JSON格式”:”*/ 
        /********************************************/ 
        var person2 = {  
            name: “junzi”,  
            age: 23,  
            introduce: function () {   
                            alert(“My name is ” + this.name + “.I’m ” + this.age);   
                        }  
        };  
          
          
          
        /********************************************/ 
        /* 第三种构建对象的办法,与Java中有些相似*/ 
        /********************************************/ 
        var Person = function () {  
            this.name = “junzi”;  
            this.age = 23;  
            this.introduce = function () {  
                                alert(“My name is ” + this.name + “.I’m ” + this.age);  
                            };  
        };  
        var person3 = new Person();  
          
          
          
        /********************************************/ 
        /* 第四种构建对象,与第三种类似,只不过参数通过new 构造传入 */ 
        /********************************************/ 
        var Person = function (name, age) {  
            this.name = name;  
            this.age = age;  
            this.introduce = function () {  
                                alert(“My name is ” + this.name + “.I’m ” + this.age);  
                            };  
        };  
        var person4 = new Person(“junzi”,23);  
          
          
          
        /********************************************/ 
        /* 看看实例之间的关系@@ */ 
        /********************************************/ 
        var person5 = new Person(“chaokong”,23);  
        function checkFunc(){  
            alert(person4.introduce==person5.introduce);//结果是false,说明introduce有两个实现分别在4和5中  
            alert(person4.age==person5.age);// 结果是true,说明基本类型的话之比较数值是否相同  
            alert(person4.name==person5.name);// 如果两个名字值不同,则为false,***推测***在javascript中的变量比较的是值是否相同,而方法被视为对象.于是下边…  
        }  
          
          
          
        /********************************************/ 
        /* 通过prototype的方式 */ 
        /********************************************/ 
        var PersonI = function(name,age){  
            this.name = name;  
            this.age = age;  
        }  
        /* 
         * 在JavaScript中,prototype对象是实现面向对象的一个重要机制。 
         * 每个函数就是一个对象(Function),函数对象都有一个子对象,即prototype对象,类是以函数的形式来定义的。 
         * prototype表示该函数的原型,也表示一个类的成员的集合。 
         * 在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。 
         * 1、该对象被类所引用,只有函数对象才可引用; 
         * 2、在new实例化后,其成员被实例化,实例对象方可调用。 
         * 同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。  
         */ 
        PersonI.prototype.introduce = function(){  
                                            alert(“My name is ” + this.name + “.I’m ” + this.age);  
                                        }  
        var person6 = new PersonI(“junzi”,23);  
        var person7 = new PersonI(“chaokong”,23);  
        function checkFuncByProto(){  
            alert(person6.introduce==person7.introduce);//  
            alert(person6.age==person7.age);  
            alert(person6.name==person7.name);  
        }  
          
          
          
        /********************************************/ 
        /* 研究研究prototype*/ 
        /********************************************/ 
        /* 
         * JavaScript中创建一个对象分以下几步: 
         * <1> var p={}; 也就是说,初始化一个对象p。 
         * <2> p.__proto__=Person.prototype; 
         * <3> Person.call(p);也就是说构造p,也可以称之为初始化p。 
         */ 
        var PersonII = function () { };  
        //通过prototype创建一个方法  
        PersonII.prototype.sayHello = function(){  
            alert(“hello”);  
        }  
        var p = new PersonII();  
        function testCnstrct(){  
            alert(p.__proto__ === PersonII.prototype);  
        }  
        /* 
         * 首先var p=new PersonII();可以得出p.__proto__=PersonII.prototype。 
         * 那么当我们调用p.sayHello()时,首先p中没有sayHello这个属性, 
         * 于是,他就需要到他的__proto__中去找,也就是PersonII.prototype, 
         * 而我们在上面定义了PersonII.prototype.sayHello=function(){};  
         * 于是,就找到了这个方法。 
         */ 
        function testCnstrctpttp(){  
            p.sayHello();  
        }  
        /** 继续…原型链 */ 
        PersonII.prototype.age = 23;// 设定PersonII的属性  
        var Programmer = function () { };// 创建一个新对象Programmer,可以得出pp.__proto__ = Programmer.prototype;  
        /* 
         * 设 var tempp = new PersonII(); 
         * ∵ Programmer.prototype = new PersonII(); 
         * ∴ Programmer.prototype = tempp; 
         * 
         * ∵ tempp.__proto__ = PersonII.prototype; 
         * ∴ Programmer.prototype.__proto__ = PersonII.prototype; 
         * 设  var pp = new Programmer(); 
         * ∴ pp.__proto__ = Programmer.prototype。 
         * ∴ pp.__proto__.__proto__ = PersonII.prototype。 
         * 
         *  
         * pp中没有sayHello()这个方法,所以到pp.__proto__中查找. 
         * pp.__proto__(也就是Programmer.prototype,也就是tempp,也就是PersonII(),)也没有sayHello()这个方法,所以到pp.__proto__.__proto__中查找 
         * pp.__proto__.__proto__也就是PersonII().prototype,在这里存在sayHello()这个方法 
         * 
         * age属性是同样的道理,只不过在Programmer.prototype的时候就已经找到age了,所以就不继续往下找了. 
         */ 
         /* 这也就是原型链的实现原理。 
         * 其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用, 
         * 他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__! 
         */ 
        Programmer.prototype = new PersonII();// ***   
        Programmer.prototype.writeCode = function () {  
            alert(“print ‘fuck the js with my jb'”);  
        };  
        Programmer.prototype.age = 22;  
        var pp = new Programmer();  
        function testDbproto(){  
            pp.sayHello();  
            pp.writeCode();  
            alert(pp.age);  
        }  
          
          
          
        /********************************************/ 
        /* JSON格式详细 */ 
        /********************************************/ 
        /* 1. */ 
        var PersonIII = {  
            create: function (name, age) {  
                this.name = name;  
                this.age = age;  
            },  
            introduce: function () {  
                alert(“Hello,My name is ” + this.name + “.I am ” + this.age);  
            }  
        }  
      
        function JSONFontI(){  
            /*  
             * 这样是不行的,因为piii = Person.__proto__,而没有这样的 XXX.__proto___=Person.prototype,所以找不到PersonIII内部的方法 
             * var piii = new PersonIII()  
             * piii.create(“junzi”, 23); 
             * piii.introduce(); 
             */ 
             PersonIII.create(“junzi”, 23);  
             PersonIII.introduce();  
        }  
          
        /* 2. */ 
        /* 用X做一个中间变量,使得我们可以访问JSON对象的内部属性。*/ 
        function JSONFontII(){  
            var x = function(){ };//必须有function()  
            x.prototype = PersonIII;  
            var px = new x();  
            px.create(“junzi”, 23);  
            px.introduce();  
        }  
        /* 3. */ 
        /* 工厂模式 */ 
        var Factory = {  
            createPersonIII : function (className,name,age) {  
                                var temp = function () {  
                                    className.create(name, age);  
                                };  
                                temp.prototype = className;  
                                var result = new temp();  
                                return result;  
                            }  
        };  
        function testFactory(){  
            var person = Factory.createPersonIII(PersonIII,”junzi”,23);  
            person.introduce();  
        }  
 
        /* 4. */ 
        /* 抽象工厂模式 */ 
        var abstractFactory = {  
            create: function (className, params) {  
                        var temp = function () {  
                                className.create.apply(this, params);  
                        };  
                        temp.prototype = className;  
                        var result = new temp();  
                        return result;  
                    }  
        };  
        function testAbstractFactory(){  
            var person = abstractFactory.create(PersonIII,[“junzi”,23]);  
            person.introduce();  
        }  
    </script>  
</body>  
</html> 
 

 

JavaScript 的JSON和数组混杂区分

Javascript代码:

var person = { personalInfo:{} , linkmans:[] , accounts:[] , handlers:[] } ;

等我来解释一下:
  首先,person 是一个 json ,它包含四个东东:personalInfo , linkmans, accounts, handlers
  接着,personalInfo 是一个 json ,
           而 这三个 linkmans, accounts, handlers 都分别为 数组

javascript 读取xml 数据

<?xml version=”1.0″ encoding=”gb2312″?>   
<treeview>   
<tree id=”p1″>   
<text>山东省</text>   
<target>_blank</target>   
<title>省份</title>   
<link></link>   
<tree id=”p1-1″>   
<text>威海市</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
</tree>   
<tree id=”p1-2″>   
<text>烟台市</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
<node id=”p1-2-1″>   
<text>长夼村</text>   
<target>_blank</target>   
<title>乡镇</title>   
<link>http://www.baidu.com/</link>   
</node>   
</tree>   
<node id=”p1-3″>   
<text>富镇</text>   
<target>_blank</target>   
<title>乡镇</title>   
<link>http://www.baidu.com/</link>   
</node>   
</tree>   
 
<tree id=”p2″>   
<text>河北省</text>   
<target>_blank</target>   
<title>省份</title>   
<link></link>   
<tree id=”p2-1″>   
<text>泊头市</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
<node id=”p2-1-1″>   
<text>郊河</text>   
<target>_blank</target>   
<title>乡镇</title>   
<link>http://www.baidu.com/</link>   
</node>   
</tree>   
<tree id=”p2-2″>   
<text>石家庄</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
</tree>   
</tree>   
 
<tree id=”p3″>   
<text>浙江省</text>   
<target>_blank</target>   
<title>省份</title>   
<link></link>   
<tree id=”p3-1″>   
<text>杭州市</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
<node id=”p3-1-1″>   
<text>某镇</text>   
<target>_blank</target>   
<title>乡镇</title>   
<link>http://www.baidu.com/</link>   
</node>   
</tree>   
<tree id=”p3-2″>   
<text>温州市</text>   
<target>_blank</target>   
<title>城市</title>   
<link></link>   
<node id=”p3-2-1″>   
<text>某镇</text>   
<target>_blank</target>   
<title>乡镇</title>   
<link>http://www.baidu.com/</link>   
</node>   
</tree>   
</tree>   
</treeview>  

 

<?xml version=”1.0″ encoding=”gb2312″?>
<treeview>
<tree id=”p1″>
<text>山东省</text>
<target>_blank</target>
<title>省份</title>
<link></link>
<tree id=”p1-1″>
<text>威海市</text>
<target>_blank</target>
<title>城市</title>
<link></link>
</tree>
<tree id=”p1-2″>
<text>烟台市</text>
<target>_blank</target>
<title>城市</title>
<link></link>
<node id=”p1-2-1″>
<text>长夼村</text>
<target>_blank</target>
<title>乡镇</title>
<link>http://www.baidu.com/</link>
</node>
</tree>
<node id=”p1-3″>
<text>富镇</text>
<target>_blank</target>
<title>乡镇</title>
<link>http://www.baidu.com/</link>
</node>
</tree>

<tree id=”p2″>
<text>河北省</text>
<target>_blank</target>
<title>省份</title>
<link></link>
<tree id=”p2-1″>
<text>泊头市</text>
<target>_blank</target>
<title>城市</title>
<link></link>
<node id=”p2-1-1″>
<text>郊河</text>
<target>_blank</target>
<title>乡镇</title>
<link>http://www.baidu.com/</link>
</node>
</tree>
<tree id=”p2-2″>
<text>石家庄</text>
<target>_blank</target>
<title>城市</title>
<link></link>
</tree>
</tree>

<tree id=”p3″>
<text>浙江省</text>
<target>_blank</target>
<title>省份</title>
<link></link>
<tree id=”p3-1″>
<text>杭州市</text>
<target>_blank</target>
<title>城市</title>
<link></link>
<node id=”p3-1-1″>
<text>某镇</text>
<target>_blank</target>
<title>乡镇</title>
<link>http://www.baidu.com/</link>
</node>
</tree>
<tree id=”p3-2″>
<text>温州市</text>
<target>_blank</target>
<title>城市</title>
<link></link>
<node id=”p3-2-1″>
<text>某镇</text>
<target>_blank</target>
<title>乡镇</title>
<link>http://www.baidu.com/</link>
</node>
</tree>
</tree>
</treeview>

然后:javascript函数实现:(文件名称:tree.htm)
Java代码

<script Language=”JavaScript”>   
var HTML = “”;   
var space = “”;   
var blank = ”   “;   
function getSubject()   
{   
var xmlDoc;   
 
if(window.ActiveXObject)   
{   
//获得操作的xml文件的对象   
xmlDoc = new ActiveXObject(‘Microsoft.XMLDOM’);   
xmlDoc.async = false;   
xmlDoc.load(“tree.xml”);   
if(xmlDoc == null)   
{   
alert(‘您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!’);   
window.location.href=’/Index.aspx’;   
return;   
}   
}   
//解析xml文件,判断是否出错   
if(xmlDoc.parseError.errorCode != 0)   
{   
alert(xmlDoc.parseError.reason);   
return;   
}   
//获得根接点   
var nodes = xmlDoc.documentElement.childNodes;   
//得到根接点下共有子接点个数,并循环   
for(var i=0; i<nodes.length; i++)   
{   
//如果接点名为 tree   
if(nodes(i).nodeName == “tree”)   
{   
readTree(nodes(i));   
}   
//如果接点名为 node   
else if(nodes(i).nodeName == “node”)   
{   
readNode(nodes(i));   
}   
}   
//删除对象   
delete(xmlDoc);   
//显示HTML   
window.show.innerHTML = HTML;   
return;   
}   
//读Tree节点   
function readTree(cI)   
{   
var nodes = cI.childNodes;   
var menuHTML = space;   
menuHTML += blank;   
//得到超级链接   
menuHTML += “<a href='”;   
//如果该节点的连接属性不为空,则连接   
if(cI.selectNodes(“link”)(0).text != “”)   
{   
menuHTML += cI.selectNodes(“link”)(0).text;   
}   
//否则为空链接   
else   
{   
menuHTML += “#”;   
}   
//目标   
if(cI.selectNodes(“target”)(0).text != “”)   
{   
menuHTML += ” target='”+cI.selectNodes(“target”)(0).text;   
menuHTML += “‘”;   
}   
//点击菜单事件,调用divshow(vid)函数   
menuHTML += ” onclick=javascript:divshow(‘”+cI.getAttribute(“id”)+”‘);”;   
//得到节点标题   
menuHTML += ” title='”;   
menuHTML += cI.selectNodes(“title”)(0).text;   
//结束   
menuHTML += “‘>”;   
//得到节点的正文   
menuHTML += cI.selectNodes(“text”)(0).text;   
menuHTML += “</a><br>\n”;   
//将menuHTML设置添加到HTML字符串   
HTML += menuHTML;   
//得到该节点的属性值<span   
HTML += “<div id='”+cI.getAttribute(“id”)+”‘ style=’display:none’>\n”;   
for(var i=0; i<nodes.length; i++)   
{   
var tempImg = “”;   
tempImg += blank;   
if(nodes(i).nodeName == “tree”)   
{   
space += tempImg;   
readTree(nodes(i));   
space = “”;   
}   
else if(nodes(i).nodeName == “node”)   
{   
space += tempImg;   
readNode(nodes(i));   
}   
}   
HTML += “</div>\n”;   
return;   
}   
//读Node节点   
function readNode(cI)   
{   
var nodeHTML = space;   
nodeHTML += blank;   
//设置超级链接   
nodeHTML += “<a href='”;   
//得到连接地址   
nodeHTML += cI.selectNodes(“link”)(0).text;   
//目标   
if(cI.selectNodes(“target”)(0).text != “”)   
nodeHTML += “‘ target='”+cI.selectNodes(“target”)(0).text;   
//得到节点标题   
nodeHTML += “‘ title='”;   
nodeHTML += cI.selectNodes(“title”)(0).text;   
//结束   
nodeHTML += “‘>”;   
//得到节点的正文   
nodeHTML += cI.selectNodes(“text”)(0).text;   
nodeHTML += “</a><br>\n”;   
HTML += nodeHTML;   
//HTML += “<div id='”+cI.getAttribute(“id”)+”‘>”;   
space = “”;   
return;   
}   
//操作对象的显示还是隐藏效果   
function divshow(vid)   
{   
if(document.all[vid].style.display == “none”)   
{   
document.all[vid].style.display = “block”;   
}   
else   
{   
document.all[vid].style.display = “none”;   
}   
return;   
}   
</script>  
  
 

Html代码

<html>   
<head>   
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>   
<title>JS_XML</title>   
 
<style type=”text/css”>   
<!–   
body   
{   
margin-left: 0px;   
margin-top: 0px;   
margin-right: 0px;   
margin-bottom: 0px;   
font-size: 9pt;   
}   
A   
{   
text-decoration:none;   
font-family: “宋体”;   
font-size: 9pt;   
COLOR:#000000;   
}   
–>   
</style>   
 
</head>   
<body bgcolor=”#EEEEEE” leftmargin=”0″ topmargin=”0″>   
<div id=show></div>   
</body>   
<script>   
getSubject()   
</script>   
</html>  

js常用方法

代码:
function strlen(str)   
{   
    var i;   
    var len;   
       
    len = 0;   
    for (i=0;i<>
    {   
        if (str.charCodeAt(i)>255) len+=2; else len++;   
    }   
    return len;   
}  
 

/*
* 判断是否为数字,是则返回true,否则返回false
*/

代码
function f_check_number(obj)   
{          
    if (/^\d+$/.test(obj.value))   
    {   
       return true;   
    }    
    else    
    {   
       f_alert(obj,”请输入数字”);   
       return false;   
    }   
}   
 

/*
* 判断是否为自然数,是则返回true,否则返回false
*/

代码
function f_check_naturalnumber(obj)   
{          
    var s = obj.value;   
    if (/^[0-9]+$/.test( s ) && (s > 0))   
    {   
       return true;   
    }    
    else    
    {   
        f_alert(obj,”请输入自然数”);   
        return false;   
    }   
}   
 

/*
* 判断是否为整数,是则返回true,否则返回false
*/

代码
function f_check_integer(obj)   
{          
    if (/^(\+|-)?\d+$/.test( obj.value ))    
    {   
       return true;   
    }    
    else    
    {   
        f_alert(obj,”请输入整数”);   
        return false;   
    }   
}   
 

/*
* 判断是否为实数,是则返回true,否则返回false
*/

代码
function f_check_float(obj)   
{          
    if (/^(\+|-)?\d+($|\.\d+$)/.test( obj.value ))    
    {   
       return true;   
    }    
    else    
    {   
        f_alert(obj,”请输入实数”);   
       return false;   
    }   
}   
  
/*
用途:检查输入字符串是否只由汉字组成
如果通过验证返回true,否则返回false
*/

代码
function f_check_zh(obj){   
    if (/^[\u4e00-\u9fa5]+$/.test(obj.value)) {   
      return true;   
    }   
    f_alert(obj,”请输入汉字”);   
    return false;   
}   
 

/*
* 判断是否为小写英文字母,是则返回true,否则返回false
*/

代码
function f_check_lowercase(obj)   
{          
    if (/^[a-z]+$/.test( obj.value ))    
    {   
       return true;   
    }    
    f_alert(obj,”请输入小写英文字母”);   
    return false;   
}   
 

/*
* 判断是否为大写英文字母,是则返回true,否则返回false
*/

代码
function f_check_uppercase(obj)   
{          
    if (/^[A-Z]+$/.test( obj.value ))    
    {   
       return true;   
    }    
    f_alert(obj,”请输入大写英文字母”);   
    return false;   
}   
 

/*
* 判断是否为英文字母,是则返回true,否则返回false
*/

代码
function f_check_letter(obj)   
{          
    if (/^[A-Za-z]+$/.test( obj.value ))    
    {   
       return true;   
    }    
    f_alert(obj,”请输入英文字母”);   
    return false;   
}   
 

/*
用途:检查输入字符串是否只由汉字、字母、数字组成
输入:
value:字符串
返回:
如果通过验证返回true,否则返回false
*/

代码
function f_check_ZhOrNumOrLett(obj){    //判断是否是汉字、字母、数字组成   
    var regu = “^[0-9a-zA-Z\u4e00-\u9fa5]+$”;      
    var re = new RegExp(regu);   
    if (re.test( obj.value )) {   
      return true;   
    }   
    f_alert(obj,”请输入汉字、字母或数字”);   
    return false;   
}   
 

/*
用途:校验ip地址的格式
输入:strIP:ip地址
返回:如果通过验证返回true,否则返回false;
*/

代码
function f_check_IP(obj)    
{    
    var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; //匹配IP地址的正则表达式   
    if(re.test( obj.value ))   
    {   
        if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;   
    }   
    f_alert(obj,”请输入合法的计算机IP地址”);   
    return false;    
}   
 

/*
用途:检查输入对象的值是否符合端口号格式
输入:str 输入的字符串
返回:如果通过验证返回true,否则返回false
*/

代码
function f_check_port(obj)   
{   
    if(!f_check_number(obj))   
        return false;   
    if(obj.value < 65536)   
        return true;   
    f_alert(obj,”请输入合法的计算机IP地址端口号”);   
    return false;    
}   
 

/*
用途:检查输入对象的值是否符合网址格式
输入:str 输入的字符串
返回:如果通过验证返回true,否则返回false
*/

代码
function f_check_URL(obj){     
    var myReg = /^((http:[/][/])?\w+([.]\w+|[/]\w*)*)?$/;    
    if(myReg.test( obj.value )) return true;    
    f_alert(obj,”请输入合法的网页地址”);   
    return false;    
}   
 

/*
用途:检查输入对象的值是否符合E-Mail格式
输入:str 输入的字符串
返回:如果通过验证返回true,否则返回false
*/

代码
function f_check_email(obj){     
    var myReg = /^([-_A-Za-z0-9\.]+)@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;    
    if(myReg.test( obj.value )) return true;    
    f_alert(obj,”请输入合法的电子邮件地址”);   
    return false;    
}   
 

/*
要求:一、移动电话号码为11或12位,如果为12位,那么第一位为0
二、11位移动电话号码的第一位和第二位为”13″
三、12位移动电话号码的第二位和第三位为”13″
用途:检查输入手机号码是否正确
输入:
s:字符串
返回:
如果通过验证返回true,否则返回false
*/

代码
function f_check_mobile(obj){      
    var regu =/(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)/;   
    var re = new RegExp(regu);   
    if (re.test( obj.value )) {   
      return true;   
    }   
    f_alert(obj,”请输入正确的手机号码”);   
    return false;      
}   
 

/*
要求:一、电话号码由数字、”(“、”)”和”-“构成
二、电话号码为3到8位
三、如果电话号码中包含有区号,那么区号为三位或四位
四、区号用”(“、”)”或”-“和其他部分隔开
用途:检查输入的电话号码格式是否正确
输入:
strPhone:字符串
返回:
如果通过验证返回true,否则返回false
*/

代码
function f_check_phone(obj)    
{   
    var regu =/(^([0][1-9]{2,3}[-])?\d{3,8}(-\d{1,6})?$)|(^\([0][1-9]{2,3}\)\d{3,8}(\(\d{1,6}\))?$)|(^\d{3,8}$)/;    
    var re = new RegExp(regu);   
    if (re.test( obj.value )) {   
      return true;   
    }   
    f_alert(obj,”请输入正确的电话号码”);   
    return false;   
}   
 

/* 判断是否为邮政编码 */

代码
function f_check_zipcode(obj)   
{   
    if(!f_check_number(obj))   
        return false;   
    if(obj.value.length!=6)   
    {   
        f_alert(obj,”邮政编码长度必须是6位”);   
        return false;   
    }   
    return true;   
}   
 

/*
用户ID,可以为数字、字母、下划线的组合,
第一个字符不能为数字,且总长度不能超过20。
*/

代码
function f_check_userID(obj)   
{   
    var userID = obj.value;   
    if(userID.length > 20)   
    {   
        f_alert(obj,”ID长度不能大于20″);   
        return false;   
    }   
  
    if(!isNaN(userID.charAt(0)))   
    {   
        f_alert(obj,”ID第一个字符不能为数字”);   
        return false;   
    }   
    if(!/^\w{1,20}$/.test(userID))    
    {   
        f_alert(obj,”ID只能由数字、字母、下划线组合而成”);   
        return false;   
    }   
    return true;   
}   
 

/*
功能:验证身份证号码是否有效
提示信息:未输入或输入身份证号不正确!
使用:f_check_IDno(obj)
返回:bool
*/

代码
function f_check_IDno(obj)   
{    
    var aCity={11:”北京”,12:”天津”,13:”河北”,14:”山西”,15:”内蒙古”,21:”辽宁”,22:”吉林”,23:”黑龙江”,31:”上海”,32:”江苏”,33:”浙江”,34:”安徽”,35:”福建”,36:”江西”,37:”山东”,41:”河南”,42:”湖北”,43:”湖南”,44:”广东”,45:”广西”,46:”海南”,50:”重庆”,51:”四川”,52:”贵州”,53:”云南”,54:”西藏”,61:”陕西”,62:”甘肃”,63:”青海”,64:”宁夏”,65:”新疆”,71:”台湾”,81:”香港”,82:”澳门”,91:”国外”};   
    
    var iSum = 0;   
    var info = “”;   
    var strIDno = obj.value;   
    var idCardLength = strIDno.length;     
    if(!/^\d{17}(\d|x)$/i.test(strIDno)&&!/^\d{15}$/i.test(strIDno))    
    {   
        f_alert(obj,”非法身份证号”);   
        return false;   
    }   
    
    //在后面的运算中x相当于数字10,所以转换成a   
    strIDno = strIDno.replace(/x$/i,”a”);   
  
    if(aCity[parseInt(strIDno.substr(0,2))]==null)   
    {   
        f_alert(obj,”非法地区”);   
        return false;   
    }   
       
    if (idCardLength==18)   
    {   
        sBirthday=strIDno.substr(6,4)+”-“+Number(strIDno.substr(10,2))+”-“+Number(strIDno.substr(12,2));   
        var d = new Date(sBirthday.replace(/-/g,”/”))   
        if(sBirthday!=(d.getFullYear()+”-“+ (d.getMonth()+1) + “-” + d.getDate()))   
        {          
            f_alert(obj,”非法生日”);   
            return false;   
        }   
  
        for(var i = 17;i>=0;i –)   
            iSum += (Math.pow(2,i) % 11) * parseInt(strIDno.charAt(17 – i),11);   
  
        if(iSum%11!=1)   
        {   
            f_alert(obj,”非法身份证号”);   
            return false;   
        }   
    }   
    else if (idCardLength==15)   
    {   
        sBirthday = “19” + strIDno.substr(6,2) + “-” + Number(strIDno.substr(8,2)) + “-” + Number(strIDno.substr(10,2));   
        var d = new Date(sBirthday.replace(/-/g,”/”))   
        var dd = d.getFullYear().toString() + “-” + (d.getMonth()+1) + “-” + d.getDate();      
        if(sBirthday != dd)   
        {   
            f_alert(obj,”非法生日”);   
            return false;   
        }   
    }   
    return true;    
}   
  
/*
功能:判断是否为日期(格式:yyyy年MM月dd日,yyyy-MM-dd,yyyy/MM/dd,yyyyMMdd)
提示信息:未输入或输入的日期格式错误!
使用:f_check_date(obj)
返回:bool
*/

代码
function f_check_date(obj)   
{   
    var date = Trim(obj.value);   
    var dtype = obj.eos_datatype;   
    var format = dtype.substring(dtype.indexOf(“(“)+1,dtype.indexOf(“)”)); //日期格式   
    var year,month,day,datePat,matchArray;   
  
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2})$/.test(format))   
        datePat = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/;   
    else if(/^(y{4})(年)(M{1,2})(月)(d{1,2})(日)$/.test(format))   
        datePat = /^(\d{4})年(\d{1,2})月(\d{1,2})日$/;   
    else if(format==”yyyyMMdd”)   
        datePat = /^(\d{4})(\d{2})(\d{2})$/;   
    else  
    {   
        f_alert(obj,”日期格式不对”);   
        return false;   
    }   
    matchArray = date.match(datePat);   
    if(matchArray == null)    
    {   
        f_alert(obj,”日期长度不对,或日期中有非数字符号”);   
        return false;   
    }   
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2})$/.test(format))   
    {   
        year = matchArray[1];   
        month = matchArray[3];   
        day = matchArray[4];   
    } else  
    {   
        year = matchArray[1];   
        month = matchArray[2];   
        day = matchArray[3];   
    }   
    if (month < 1 || month > 12)   
    {                
        f_alert(obj,”月份应该为1到12的整数”);   
        return false;   
    }   
    if (day < 1 || day > 31)   
    {   
        f_alert(obj,”每个月的天数应该为1到31的整数”);   
        return false;   
    }        
    if ((month==4 || month==6 || month==9 || month==11) && day==31)   
    {   
        f_alert(obj,”该月不存在31号”);   
        return false;   
    }        
    if (month==2)   
    {   
        var isleap=(year % 4==0 && (year % 100 !=0 || year % 400==0));   
        if (day>29)   
        {                  
            f_alert(obj,”2月最多有29天”);   
            return false;   
        }   
        if ((day==29) && (!isleap))   
        {                  
            f_alert(obj,”闰年2月才有29天”);   
            return false;   
        }   
    }   
    return true;   
}   
 

/*
功能:校验的格式为yyyy年MM月dd日HH时mm分ss秒,yyyy-MM-dd HH:mm:ss,yyyy/MM/dd HH:mm:ss,yyyyMMddHHmmss
提示信息:未输入或输入的时间格式错误
使用:f_check_time(obj)
返回:bool
*/

代码
function f_check_time(obj)   
{   
    var time = Trim(obj.value);   
    var dtype = obj.eos_datatype;   
    var format = dtype.substring(dtype.indexOf(“(“)+1,dtype.indexOf(“)”)); //日期格式   
    var datePat,matchArray,year,month,day,hour,minute,second;   
  
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2}) (HH:mm:ss)$/.test(format))   
        datePat = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;   
    else if(/^(y{4})(年)(M{1,2})(月)(d{1,2})(日)(HH时mm分ss秒)$/.test(format))   
        datePat = /^(\d{4})年(\d{1,2})月(\d{1,2})日(\d{1,2})时(\d{1,2})分(\d{1,2})秒$/;   
    else if(format == “yyyyMMddHHmmss”)   
        datePat = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/;   
    else  
    {   
        f_alert(obj,”日期格式不对”);   
        return false;   
    }   
    matchArray = time.match(datePat);   
    if(matchArray == null)    
    {   
        f_alert(obj,”日期长度不对,或日期中有非数字符号”);   
        return false;   
    }   
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2}) (HH:mm:ss)$/.test(format))   
    {   
        year = matchArray[1];   
        month = matchArray[3];   
        day = matchArray[4];   
        hour = matchArray[5];   
        minute = matchArray[6];   
        second = matchArray[7];   
    } else  
    {   
        year = matchArray[1];   
        month = matchArray[2];   
        day = matchArray[3];   
        hour = matchArray[4];   
        minute = matchArray[5];   
        second = matchArray[6];   
    }   
    if (month < 1 || month > 12)   
    {                
        f_alert(obj,”月份应该为1到12的整数”);   
        return false;   
    }   
    if (day < 1 || day > 31)   
    {              
        f_alert(obj,”每个月的天数应该为1到31的整数”);   
        return false;   
    }        
    if ((month==4 || month==6 || month==9 || month==11) && day==31)   
    {            
        f_alert(obj,”该月不存在31号”);   
        return false;   
    }        
    if (month==2)   
    {   
        var isleap=(year % 4==0 && (year % 100 !=0 || year % 400==0));   
        if (day>29)   
        {                  
            f_alert(obj,”2月最多有29天”);   
            return false;   
        }   
        if ((day==29) && (!isleap))   
        {                  
            f_alert(obj,”闰年2月才有29天”);   
            return false;   
        }   
    }   
    if(hour<0 || hour>23)   
    {   
        f_alert(obj,”小时应该是0到23的整数”);   
        return false;   
    }   
    if(minute<0 || minute>59)   
    {   
        f_alert(obj,”分应该是0到59的整数”);   
        return false;   
    }   
    if(second<0 || second>59)   
    {   
        f_alert(obj,”秒应该是0到59的整数”);   
        return false;   
    }   
    return true;   
}   
 

/*判断当前对象是否可见*/

代码
function isVisible(obj){   
    var visAtt,disAtt;   
    try{   
        disAtt=obj.style.display;   
        visAtt=obj.style.visibility;   
    }catch(e){}   
    if(disAtt==”none” || visAtt==”hidden”)   
        return false;   
    return true;   
}   
 

/*判断当前对象及其父对象是否可见*/

代码
function checkPrVis(obj){   
    var pr=obj.parentNode;   
    do{   
        if(pr == undefined || pr == “undefined”) return true;   
        else{   
            if(!isVisible(pr)) return false;   
        }   
    }while(pr=pr.parentNode);   
    return true;   
}   
 

/* 弹出警告对话框,用户点确定后将光标置于出错文本框上, 并且将原来输入内容选中。*/

代码
function f_alert(obj,alertInfo)   
{   
    var caption = obj.getAttribute(“eos_displayname”);   
    if(caption == null)   
        caption = “”;   
    alert(caption + “:” + alertInfo + “!”);    
    obj.select();   
    if(isVisible(obj) && checkPrVis(obj))   
        obj.focus();   
}   
 

/**
* 检测字符串是否为空
*/

代码
function isNullOrEmpty(str)   
{   
    str = Trim(str);   
    if(str.length == 0) {  
        return true;   
    }
    else {
        return false
    }

//去左空格
function LTrim(str){
return str.replace(/^\s*/g,””);
}
//去右空格
function RTrim(str){
return str.replace(/\s*$/g,””);
}

//去首尾空格
function Trim(str){
return str.replace(/^\s*|\s*$/g,””);
}

//get parameter value from ‘get’ url, strurl: window.parent.location.href or window.location.href, para: keyName
function getPara(para, strurl){
if (strurl.indexOf(“?”) == -1) {
   //Do nothing.
   return null;
}
else {
   //get the string after ‘?’
   var urlQuery = strurl.split(“?”);
   if(urlQuery[1].indexOf(“&”)==-1){//only one parameter
    if (urlQuery[1].indexOf(“=”) == -1) {
     //no parameter value
     //Do nothing
     return null;
    }
    else{
     var keyValue = urlQuery[1].split(“=”);
     var key = keyValue[0];
     var value = keyValue[1];
     if(key==para){
      return value;
     }
    }
   }
   else{
    // analyse parameters
    var urlTerms = urlQuery[1].split(“&”);
    for (var i = 0; i < urlTerms.length; i++){
     var keyValue = urlTerms[i].split(“=”);
     var key = keyValue[0];
     var value = keyValue[1];
     if(key==para){
      return value;
     }
    }
   }
}
return null;
}

// 功能: 1)去除字符串前后所有空格
// 2)去除字符串中所有空格(包括中间空格,需要设置第2个参数为:g)
function Trim(str,is_global)
{
var result;
result = str.replace(/(^\s+)|(\s+$)/g,””);
if(is_global.toLowerCase()==”g”)
result = result.replace(/\s/g,””);
return result;
}

遍历json

<script language=”javascript”>  
 function e()  
 {  
    var json=[{“kl_id”:”2″,”kl_title”:”Test date”,”kl_content”:”Test date”,”kl_type”:”1″,”id”:”1″},{“kl_id”:”2″,”kl_title”:”Test”,”kl_content”:”Test”,”kl_type”:”1″,”id”:”2″}]  
    var str = “”;  
    for (var one in json)  
    {  
        for(var key in json[one])  
        {  
            str += json[one][key]+ “,”;  
        }  
    }  
    document.form.txtName.value = str;  
 }  
 </script> 

javascript:void(0)

JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。

void 操作符用法格式如下:

1. javascript:void (expression)
2. javascript:void expression

expression 是一个要计算的 JavaScript 标准的表达式。表达式外侧的圆括号是可选的,但是写上去是一个好习惯。 (实现版本   Navigator 3.0   )

你可以使用 void 操作符指定超级链接。表达式会被计算但是不会在当前文档处装入任何内容。
下面的代码创建了一个超级链接,当用户点击以后不会发生任何事。当用户点击链接时,void(0) 计算为 0,但在 JavaScript 上没有任何效果。

<A HREF=”javascript:void(0)”>单击此处什么也不会发生</A>

下面的代码创建了一个超级链接,用户单击时会提交表单。

<A HREF=”javascript:void(document.form.submit())”>单击此处提交表单</A>

那什么情况下用void(0)比较多呢,无刷新,当然是Ajax了,看一下Ajax的web页面的话,一般都会看到有很多的void(0),所以在使用void(0)之前,最好先想一想这个页面是否需要整体刷新。

—————————————————————————-

使用javascript的时候,通常我们会通过类似:<a href=”#” onclick=”javascript:方法”>提交</a> 的方式,通过一个伪链接来调用javascript方法。这种方法有一个问题是:虽然点击该链接的时候不会跳转页面,但是滚动条会往上滚,解决的办法是返 回一个false。
如下所示:

<a href=”#” onclick=”javascript:方法;return false;”>提交</a><a href=”javascript:void(0)” onclick=”javascript:方法;return false;”>提交</a>

还有一个方法是 #this

a href=”#this” onclick=”javascript:方法”

—————————————————————————-
#包含了一个位置信息

默认的锚点是#top 也就是网页的上端

而javascript:void(0)   仅仅表示一个死链接

这就是为什么有的时候页面很长浏览链接明明是#可是跳动到了页首

而javascript:void(0) 则不是如此

所以调用脚本的时候最好用void(0) 或者<input onclick> <div onclick>等

打开新窗口链接的几种办法

 

1.window.open(‘url’)

2.用自定义函数

        <script>
        function openWin(tag,obj)
        {
             obj.target=”_blank”;
             obj.href = “Web/Substation/Substation.aspx?stationno=”+tag;
             obj.click();
         }
        </script>

<a href=”javascript:void(0)” onclick=”openWin(3,this)”>株洲</a>
3.window.location.href=””

 

总结:1)链接(href)直接使用javascript:void(0)在IE中可能会引起一些问题,比如:造成gif动画停止播放 等,所以,最安全的办法还是使用“#”。为防止点击链接后跳转到页首,onclick事件return false即可。2)在使用void(0)之前,最好先想一想,这个页面是否需要整体刷新,不需要整体刷新时可以用void(0)。