<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title></title>
    <description></description>
    <link>http://yunmanfan.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Struts常见异常信息和解决方法</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/197236" style="color:red;">http://yunmanfan.javaeye.com/blog/197236</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>以下所说的struts-config.xml和ApplicationResources.properties等文件名是缺省时使用的，如果你使用了多模块，或指定了不同的资源文件名称，这些名字要做相应的修改。</p>
<p><strong>1、&ldquo;No bean found under attribute key XXX&rdquo;<br /></strong>在struts-config.xml里定义了一个ActionForm，但type属性指定的类不存在，type属性的值应该是Form类的全名。或者是，在Action的定义中，name或attribute属性指定的ActionForm不存在。</p>
<p><strong>2、&ldquo;Cannot find bean XXX in any scope&rdquo;</strong><br />在Action里一般会request.setAttribute()一些对象，然后在转向的jsp文件里（用tag或request.getAttribute()方法）得到这些对象并显示出来。这个异常是说jsp要得到一个对象，但前面的Action里并没有将对象设置到request（也可以是session、servletContext）里。<br />可能是名字错了，请检查jsp里的tag的一般是name属性，或getAttribute()方法的参数值；或者是Action逻辑有问题没有执行setAttribute()方法就先转向了。<br />还有另外一个可能，纯粹是jsp文件的问题，例如&lt;logic:iterate&gt;会指定一个id值，然后在循环里&lt;bean:write&gt;使用这个值作为name的值，如果这两个值不同，也会出现此异常。（都是一个道理，request里没有对应的对象。）</p>
<p><strong>3、&ldquo;Missing message for key "XXX"&rdquo;</strong><br />缺少所需的资源，检查ApplicationResources.properties文件里是否有jsp文件里需要的资源，例如：</p>
<p>&nbsp;</p>
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 98%; padding-top: 4px; border: windowtext 0.5pt solid;">
<div><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean:message key</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">msg.name.prompt</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span></div>
</div>
<p>&nbsp;</p>
<p>这行代码会找msg.name.prompt资源，如果AppliationResources.properties里没有这个资源就会出现本异常。在使用多模块时，要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名称，否则当然什么资源也找不到，这也是一个很容易犯的错误。</p>
<p><strong>4、&ldquo;No getter method for property XXX of bean teacher&rdquo;</strong><br />这条异常信息说得很明白，jsp里要取一个bean的属性出来，但这个bean并没有这个属性。你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对：</p>
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 98%; padding-top: 4px; border: windowtext 0.5pt solid;">
<div><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean:write name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">teacher</span><span style="color: #000000;">"</span><span style="color: #000000;"> property</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">cade</span><span style="color: #000000;">"</span><span style="color: #000000;"> filter</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>5、&ldquo;Cannot find ActionMappings or ActionFormBeans collection&rdquo;<br /></strong>待解决。</p>
<p><strong>6、&ldquo;Cannot retrieve mapping for action XXX&rdquo;<br /></strong>在.jsp的&lt;form&gt;标签里指定action='/XXX'，但这个Action并未在struts-config.xml里设置过。</p>
<p><strong>7、HTTP Status 404 - /xxx/xxx.jsp<br /></strong>Forward的path属性指向的jsp页面不存在，请检查路径和模块，对于同一模块中的Action转向，path中不应包含模块名；模块间转向，记住使用contextRelative="true"。</p>
<p><strong>8、没有任何异常信息，显示空白页面</strong><br />可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。</p>
<p><strong>9、&ldquo;The element type "XXX" must be terminated by the matching end-tag "XXX".&rdquo;<br /></strong>这个是struts-config.xml文件的格式错误，仔细检查它是否是良构的xml文件，关于xml文件的格式这里就不赘述了。</p>
<p><strong>10、&ldquo;Servlet.init() for servlet action threw exception&rdquo;</strong><br />一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息，其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下：</p>
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 98%; padding-top: 4px; border: windowtext 0.5pt solid;">
<div><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">java.lang.NullPointerException<br /><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:</span><span style="color: #000000;">1003</span><span style="color: #000000;">)<br /><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:</span><span style="color: #000000;">955</span><span style="color: #000000;">)<br /><img src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><img src="http://bjzhanghao.cnblogs.com/Images/dot.gif" alt="" /></span></div>
</div>
<p><br />为解决问题，先下载struts的源码包，然后在ActionServlet.java的第1003行插入断点，并对各变量进行监视。很丢人，我竟然把struts-config.xml文件弄丢了，因此出现了上面的异常，应该是和CVS同步时不小心删除的。</p>
<p><strong>11、&ldquo;Resources not defined for Validator&rdquo;</strong><br />这个是利用Validator插件做验证时可能出现的异常，这时你要检查validation.xml文件，看里面使用的资源是否确实有定义，form的名称是否正确，等等。</p>
<p>上面这些是我在用Struts做项目时遇到过的问题，其中一些曾困绕我不少时间，其实大部分都是自己不细心造成的。希望这篇文章能对你的开发有所帮助，并欢迎继续补充。u</p>
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/197236#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 23:26:18 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/197236</link>
        <guid>http://yunmanfan.javaeye.com/blog/197236</guid>
      </item>
      <item>
        <title>JavaScript的学习笔记（5）使用框架和Cookies</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196764" style="color:red;">http://yunmanfan.javaeye.com/blog/196764</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3><a name="使用框架">使用框架</a></h3>
<p>　　在讲述 window 对象的时候，我们提到过，一个框架内的网页也是 window 对象，也就是说，Frame 对象也是 window 对象。用最容易理解的话说，每一个 HTML 文件占用一个 window 对象，包括定义框架的网页（&ldquo;框架网页&rdquo;）。在 IE 里用&ldquo;&lt;iframe&gt;&rdquo;标记在文档中插入的框架也是 window 对象，但是用&ldquo;包含网页&rdquo;的方法（在 HTML 中显示为&ldquo;&lt;!--webbot bot="include" ...--&gt;&rdquo;）读取的 HTML 就不占用独自的 window 对象。每一个框架都是包含它的页的 window 对象的一个子对象（不知道应该叫&ldquo;属性&rdquo;不该），要引用它，可以用以下几种方法之一：</p>
<blockquote>
<p>window.frames[x]<br />window.frames['frameName']<br />window.frameName</p>
</blockquote>
<p>　　其中，x 指的是该 window 对象中指定的第几个框架，与其它数组一样，x 也是从零开始的。frameName 指的是该框架的名字，跟&lt;frame&gt;里的&ldquo;name&rdquo;属性一样。</p>
<p>　　如果使用 window.frameName 指定的 window 对象又是一个框架网页，那么引用它的框架的方法：window.frameName.subFrameName。以此类推。</p>
<p>　　要注意的时，无论在何处，引用&ldquo;window&rdquo;对象所返回的，都是&ldquo;当前&rdquo;window 对象。如果要访问其它 window 对象，就要用到 parent 和 top 属性。parent 指的是&ldquo;父级&rdquo;window 对象，也就是包含当前 window 对象的框架网页；top 指的是窗口最顶端的 window 对象。</p>
<p>　　使用框架还要密切留意你的 JavaScript 中定义的全局变量和自定义函数。它们都有它们的所属&mdash;&mdash;所在的 window 对象。要引用其它框架中的全局变量或自定义函数，都要用&ldquo;窗口对象.框架对象[.框架对象&hellip;].全局变量或自定义函数&rdquo;这种很烦的方法。</p>
<p>　　以上这个问题在建立连接时经常会被忽略：如果在&lt;head&gt;中定义了一个默认目标窗口（&lt;base target="..."&gt;），在&lt;a href="javascript:..."&gt;中，要知道输入的 JavaScript 语句是在默认目标窗口中运行的，必要时加一些&ldquo;parent&rdquo;&ldquo;top&rdquo;属性。</p>
<h3><a name="使用 Cookies">使用 Cookies</a></h3>
<p>　　我们已经知道，在 document 对象中有一个 cookie 属性。但是 Cookie 又是什么？&ldquo;某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息，这些文件就称为 Cookie。&rdquo;&mdash;&mdash; MSIE 帮助。一般来说，Cookies 是 CGI 或类似，比 HTML 高级的文件、程序等创建的，但是 JavaScript 也提供了对 Cookies 的很全面的访问权利。</p>
<p>　　在继续之前，我们先要学一学 <strong><a name="Cookie 的基本知识">Cookie 的基本知识</a></strong>。</p>
<p>　　每个 Cookie 都是这样的：&lt;cookie名&gt;=&lt;值&gt;</p>
<p>　　&lt;cookie名&gt;的限制与 JavaScript 的命名限制大同小异，少了&ldquo;不能用 JavaScript 关键字&rdquo;，多了&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。后者比较难懂，但是只要你只用字母和数字命名，就完全没有问题了。&lt;值&gt;的要求也是&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。</p>
<p>　　每个 Cookie 都有失效日期，一旦电脑的时钟过了失效日期，这个 Cookie 就会被删掉。我们不能直接删掉一个 Cookie，但是可以用设定失效日期早于现在时刻的方法来间接删掉它。</p>
<p>　　每个网页，或者说每个站点，都有它自己的 Cookies，这些 Cookies 只能由这个站点下的网页来访问，来自其他站点或同一站点下未经授权的区域的网页，是不能访问的。每一&ldquo;组&rdquo;Cookies 有规定的总大小（大约 2KB 每&ldquo;组&rdquo;），一超过最大总大小，则最早失效的 Cookie 先被删除，来让新的 Cookie&ldquo;安家&rdquo;。</p>
<p>　　现在我们来学习<strong><a name="使用 document.cookie 属性">使用 document.cookie 属性</a></strong>。</p>
<p>　　如果直接使用 document.cookie 属性，或者说，用某种方法，例如给变量赋值，来获得 document.cookie 的值，我们就可以知道在现在的文档中有多少个 Cookies，每个 Cookies 的名字，和它的值。例如，在某文档中添加&ldquo;document.write(document.cookie)&rdquo;，结果显示：</p>
<blockquote>
<p>name=kevin; email=kevin@kevin.com; lastvisited=index.html</p>
</blockquote>
<p>这意味着，文档包含 3 个 Cookies：name, email 和 lastvisited，它们的值分别是 kevin, kevin@kevin.com 和 index.html。可以看到，两个 Cookies 之间是用分号和空格隔开的，于是我们可以用 cookieString.split('; ') 方法得到每个 Cookie 分开的一个数组（先用 var cookieString = document.cookie）。</p>
<p>　　设定一个 Cookie 的方法是对 document.cookie 赋值。与其它情况下的赋值不同，向 document.cookie 赋值不会删除掉原有的 Cookies，而只会增添 Cookies 或更改原有 Cookie。赋值的格式：</p>
<blockquote>
<p>document.cookie = '<strong>cookieName</strong>=' + <span style="text-decoration: underline;">escape</span>('<strong>cookieValue</strong>')<br />&nbsp;&nbsp;&nbsp;&nbsp; + '<span style="text-decoration: underline;">;</span>expires=' + <strong>expirationDateObj</strong>.<span style="text-decoration: underline;">toGMTString()</span>;</p>
</blockquote>
<p>是不是看到头晕了呢？以上不是粗体字的地方是要照抄不误的，粗体字是要按实际情况做出改动的。cookieName 表示 Cookie 的名称，cookieValue 表示 Cookie 的值，expirationDateObj 表示储存着失效日期的日期对象名，如果不需要指定失效日期，则不需要第二行。不指定失效日期，则浏览器默认是在关闭浏览器（也就是关闭所有窗口）之后过期。</p>
<p>　　看到了上面的一些下划线了么？这些是应该注意的地方。<br />　　首先 escape() 方法：为什么一定要用？因为 Cookie 的值的要求是&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。我们知道&ldquo;escape()&rdquo;方法是把字符串按 URL 编码方法来编码的，那我们只需要用一个&ldquo;escape()&rdquo;方法来处理输出到 Cookie 的值，用&ldquo;unescape()&rdquo;来处理从 Cookie 接收过来的值就万无一失了。而且这两个方法的最常用途就是处理 Cookies。其实设定一个 Cookie 只是&ldquo;document.cookie = 'cookieName=cookieValue'&rdquo;这么简单，但是为了避免在 cookieValue 中出现 URL 里不准出现的字符，还是用一个 escape() 好。<br />　　然后&ldquo;expires&rdquo;前面的分号：注意到就行了。是分号而不是其他。<br />　　最后 toGMTString() 方法：设定 Cookie 的时效日期都是用 GMT 格式的时间的，其它格式的时间是没有作用的。</p>
<p>　　现在我们来实战一下。设定一个&ldquo;name=rose&rdquo;的 Cookie，在 3 个月后过期。</p>
<blockquote>
<p>var expires = new Date();<br />expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);<br />/*&nbsp;&nbsp; 三个月 x 一个月当作 30 天 x 一天 24 小时<br />&nbsp;&nbsp; x 一小时 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */<br />document.cookie = 'name=rose;expires=' + expires.toGMTString();</p>
</blockquote>
<p>为什么没有用 escape() 方法？这是因为我们知道 rose 是一个合法的 URL 编码字符串，也就是说，'rose' == escape('rose')。一般来说，如果设定 Cookie 时不用 escape()，那获取 Cookie 时也不用 unescape()。</p>
<p>　　再来一次：编写一个函数，作用是查找指定 Cookie 的值。</p>
<blockquote>
<p>function getCookie(cookieName) {<br />&nbsp; var cookieString = document.cookie;<br />&nbsp; var start = cookieString.indexOf(cookieName + '=');<br />&nbsp; // 加上等号的原因是避免在某些 Cookie 的值里有<br />&nbsp; // 与 cookieName 一样的字符串。<br />&nbsp; if (start == -1) // 找不到<br />&nbsp;&nbsp;&nbsp; return null;<br />&nbsp; start += cookieName.length + 1;<br />&nbsp; var end = cookieString.indexOf(';', start);<br />&nbsp; if (end == -1) return unescape(cookieString.substring(start));<br />&nbsp; return unescape(cookieString.substring(start, end));<br />}</p>
</blockquote>
<p>这个函数用到了字符串对象的一些方法，如果你不记得了（你是不是这般没记性啊），请快去查查。这个函数所有的 if 语句都没有带上 else，这是因为如果条件成立，程序运行的都是 return 语句，在函数里碰上 return，就会终止运行，所以不加 else 也没问题。该函数在找到 Cookie 时，就会返回 Cookie 的值，否则返回&ldquo;null&rdquo;。</p>
<p>　　现在我们要删除刚才设定的 name=rose Cookie。</p>
<blockquote>
<p>var expires = new Date();<br />expires.setTime(expires.getTime() - 1);<br />document.cookie = 'name=rose;expires=' + expires.toGMTString();</p>
</blockquote>
<p>可以看到，只需要把失效日期改成比现在日期早一点（这里是早 1 毫秒），再用同样的方法设定 Cookie，就可以删掉 Cookie 了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/196764#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 21:55:21 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/196764</link>
        <guid>http://yunmanfan.javaeye.com/blog/196764</guid>
      </item>
      <item>
        <title>JavaScript的学习笔记（4）事件处理</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196762" style="color:red;">http://yunmanfan.javaeye.com/blog/196762</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3><a name="事件处理概述">事件处理概述</a></h3>
<p>　　&nbsp;事件处理是对象化编程的一个很重要的环节，没有了事件处理，程序就会变得很死，缺乏灵活性。事件处理的过程可以这样表示：发生事件 - 启动事件处理程序 - 事件处理程序作出反应。其中，要使事件处理程序能够启动，必须先告诉对象，如果发生了什么事情，要启动什么处理程序，否则这个流程就不能进行下去。事件的处理程序可以是任意 JavaScript 语句，但是我们一般用特定的自定义函数（function）来处理事情。</p>
<h3><a name="指定事件处理程序">指定事件处理程序</a></h3>
<p>　　指定事件处理程序有三种方法：</p>
<p><strong>方法一</strong> 直接在 HTML 标记中指定。这种方法是用得最普遍的。方法是：</p>
<blockquote>
<p>&lt;标记 ... ... 事件="事件处理程序" [事件="事件处理程序" ...]&gt;</p>
</blockquote>
<p>让我们来看看例子：</p>
<blockquote>
<p>&lt;body ... onload="alert('网页读取完成，请慢慢欣赏！')" onunload="alert('再见！')"&gt;</p>
</blockquote>
<p>这样的定义&lt;body&gt;标记，能使文档读取完毕的时候弹出一个对话框，写着&ldquo;网页读取完成，请慢慢欣赏&rdquo;；在用户退出文档（或者关闭窗口，或者到另一个页面去）的时候弹出&ldquo;再见&rdquo;。</p>
<p><strong>方法二</strong> 编写特定对象特定事件的 JavaScript。这种方法用得比较少，但是在某些场合还是很好用的。方法是：</p>
<blockquote>
<p>&lt;script language="JavaScript" for="对象" event="事件"&gt;<br />...<br />(事件处理程序代码)<br />...<br />&lt;/script&gt;</p>
</blockquote>
<p>例：</p>
<blockquote>
<p>&lt;script language="JavaScript" for="window" event="onload"&gt;<br />&nbsp; alert('网页读取完成，请慢慢欣赏！');<br />&lt;/script&gt;</p>
</blockquote>
<p><strong>方法三</strong> 在 JavaScript 中说明。方法：</p>
<p align="center">&lt;事件主角 - 对象&gt;.&lt;事件&gt; = &lt;事件处理程序&gt;;</p>
<p>用这种方法要注意的是，&ldquo;事件处理程序&rdquo;是真正的代码，而不是字符串形式的代码。如果事件处理程序是一个自定义函数，如无使用参数的需要，就不要加&ldquo;()&rdquo;。例：</p>
<blockquote>
<p>...<br /><br />function ignoreError() {<br />&nbsp; return true;<br />}<br /><br />...<br /><br />window.onerror = ignoreError; // 没有使用&ldquo;()&rdquo;</p>
</blockquote>
<p>这个例子将 ignoreError() 函数定义为 window 对象的 onerror 事件的处理程序。它的效果是忽略该 window 对象下任何错误（由引用不允许访问的 location 对象产生的&ldquo;没有权限&rdquo;错误是不能忽略的）。</p>
<h3><a name="事件详解">事件详解</a></h3>
<p><strong><a name="onblur 事件">onblur 事件</a></strong> 发生在窗口失去焦点的时候。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<p><strong><a name="onchange 事件">onchange 事件</a></strong> 发生在文本输入区的内容被更改，然后焦点从文本输入区移走之后。捕捉此事件主要用于实时检测输入的有效性，或者立刻改变文档内容。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Password 密码输入区对象">Password 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Select 选择区（下拉菜单、列表）对象">Select 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Text 文本框对象">Text 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Textarea 多行文本输入区对象">Textarea 对象</a></strong></p>
<p><strong><a name="onclick 事件">onclick 事件</a></strong> 发生在对象被单击的时候。单击是指鼠标停留在对象上，按下鼠标键，没有移动鼠标而放开鼠标键这一个完整的过程。</p>
<p>　　一个普通按钮对象（Button）通常会有 onclick 事件处理程序，因为这种对象根本不能从用户那里得到任何信息，没有 onclick 事件处理程序就等于废柴。按钮上添加 onclick 事件处理程序，可以模拟&ldquo;另一个提交按钮&rdquo;，方法是：在事件处理程序中更改表单的 action, target, encoding, method 等一个或几个属性，然后调用表单的 submit() 方法。</p>
<p>　　在 Link 对象的 onclick 事件处理程序中返回 false 值（return false），能阻止浏览器打开此连接。即，如果有一个这样的连接：&lt;a href="http://www.a.com" onclick="return false"&gt;Go!&lt;/a&gt;，那么无论用户怎样点击，都不会去到 www.a.com 网站，除非用户禁止浏览器运行 JavaScript。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Button 按钮对象">Button 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Checkbox 复选框对象">Checkbox 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#images[]; Image 图片对象">Image 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#anchors[]; links[]; Link 连接对象">Link 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Radio 单选域对象">Radio 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Reset 重置按钮对象">Reset 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Submit 提交按钮对象">Submit 对象</a></strong></p>
<p><strong><a name="onerror 事件">onerror 事件</a></strong> 发生在错误发生的时候。它的事件处理程序通常就叫做&ldquo;错误处理程序&rdquo;(Error Handler)，用来处理错误。上边已经介绍过，要忽略一切错误，就使用：</p>
<blockquote>
<p>function ignoreError() {<br />&nbsp; return true;<br />}<br /><br />window.onerror = ignoreError;</p>
</blockquote>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<p><strong><a name="onfocus 事件">onfocus 事件</a></strong> 发生在窗口得到焦点的时候。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<p><strong><a name="onload 事件">onload 事件</a></strong> 发生在文档全部下载完毕的时候。全部下载完毕意味着不但 HTML 文件，而且包含的图片，插件，控件，小程序等全部内容都下载完毕。本事件是 window 的事件，但是在 HTML 中指定事件处理程序的时候，我们是把它写在&lt;body&gt;标记中的。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<p><strong><a name="onmousedown 事件">onmousedown 事件</a></strong> 发生在用户把鼠标放在对象上按下鼠标键的时候。参考 onmouseup 事件。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Button 按钮对象">Button 对象</a>；<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#anchors[]; links[]; Link 连接对象">Link 对象</a></strong></p>
<p><strong><a name="onmouseout 事件">onmouseout 事件</a></strong> 发生在鼠标离开对象的时候。参考 onmouseover 事件。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#anchors[]; links[]; Link 连接对象">Link 对象</a></strong></p>
<p><strong><a name="onmouseover 事件">onmouseover 事件</a></strong> 发生在鼠标进入对象范围的时候。这个事件和 onmouseout 事件，再加上图片的预读，就可以做到当鼠标移到图像连接上，图像更改的效果了。有时我们看到，在指向一个连接时，状态栏上不显示地址，而显示其它的资料，看起来这些资料是可以随时更改的。它们是这样做出来的：</p>
<blockquote>
<p>&lt;a href="..."<br />&nbsp;&nbsp; onmouseover="window.status='Click Me Please!'; return true;"<br />&nbsp;&nbsp; onmouseout="window.status=''; return true;"&gt;</p>
</blockquote>
<p>　</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#anchors[]; links[]; Link 连接对象">Link 对象</a></strong></p>
<p><strong><a name="onmouseup 事件">onmouseup 事件</a></strong> 发生在用户把鼠标放在对象上鼠标键被按下的情况下，放开鼠标键的时候。如果按下鼠标键的时候，鼠标并不在放开鼠标的对象上，则本事件不会发生。</p>
<p><strong>　应用于：</strong><strong><a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#Button 按钮对象">Button 对象</a>；</strong><strong><a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#anchors[]; links[]; Link 连接对象">Link 对象</a></strong></p>
<p><strong><a name="onreset 事件">onreset 事件</a></strong> 发生在表单的&ldquo;重置&rdquo;按钮被单击（按下并放开）的时候。通过在事件处理程序中返回 false 值（return false）可以阻止表单重置。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#forms[]; Form 表单对象">Form 对象</a></strong></p>
<p><strong><a name="onresize 事件">onresize 事件</a></strong> 发生在窗口被调整大小的时候。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<p><strong><a name="onsubmit 事件">onsubmit 事件</a></strong> 发生在表单的&ldquo;提交&rdquo;按钮被单击（按下并放开）的时候。可以使用该事件来验证表单的有效性。通过在事件处理程序中返回 false 值（return false）可以阻止表单提交。</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#forms[]; Form 表单对象">Form 对象</a></strong></p>
<p><strong><a name="onunload 事件">onunload 事件</a></strong> 发生在用户退出文档（或者关闭窗口，或者到另一个页面去）的时候。与 onload 一样，要写在 HTML 中就写到&lt;body&gt;标记里。</p>
<p>　　有的 Web Masters 用这个方法来弹出&ldquo;调查表单&rdquo;，以&ldquo;强迫&rdquo;来者填写；有的就弹出广告窗口，唆使来者点击连接。我觉得这种&ldquo;onunload="open..."&rdquo;的方法很不好，有时甚至会因为弹出太多窗口而导致资源缺乏。有什么对来者说就应该在网页上说完，不对吗？</p>
<p><strong>　应用于：<a href="http://yunmanfan.javaeye.com/admin/blogs/js_3.htm#window 窗口对象">window 对象</a></strong></p>
<h3><a name="关于对象化编程的语句">关于对象化编程的语句</a></h3>
<p>　　现在我们有实力学习以下关于对象化编程，但其实属于上一章的内容了。</p>
<p><strong><a name="with 语句">with 语句</a></strong> 为一个或一组语句指定默认对象。</p>
<p>用法：with (&lt;对象&gt;) &lt;语句&gt;;</p>
<p>with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中，请注意 Math 的重复使用： </p>
<blockquote>
<p>x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);<br />y = Math.tan(14 * Math.E);</p>
</blockquote>
<p>当使用 with 语句时，代码变得更短且更易读： </p>
<blockquote>
<p>with (Math) {<br />&nbsp; x = cos(3 * PI) + sin(LN10);<br />&nbsp; y = tan(14 * E);<br />}</p>
</blockquote>
<p><strong><a name="this 对象">this 对象</a></strong> 返回&ldquo;当前&rdquo;对象。在不同的地方，this 代表不同的对象。如果在 JavaScript 的&ldquo;主程序&rdquo;中（不在任何 function 中，不在任何事件处理程序中）使用 this，它就代表 window 对象；如果在 with 语句块中使用 this，它就代表 with 所指定的对象；如果在事件处理程序中使用 this，它就代表发生事件的对象。</p>
<p>一个常用的 this 用法：</p>
<blockquote>
<p>&lt;script&gt;<br />...<br />function check(formObj) {<br />&nbsp; ...<br />}<br />...<br />&lt;/script&gt;</p>
<p>&lt;body ...&gt;<br />...<br />&lt;form ...&gt;<br />...<br />&lt;input type="text" ... onchange="check(<strong>this</strong>.form)"&gt;<br />...<br />&lt;/form&gt;<br />...<br />&lt;/body&gt;</p>
</blockquote>
<p>这个用法常用于立刻检测表单输入的有效性。</p>
<p><strong><a name="自定义构造函数">自定义构造函数</a> </strong>我们已经知道，Array()，Image()等构造函数能让我们构造一个变量。其实我们自己也可以写自己的构造函数。自定义构造函数也是用 function。在 function 里边用 this 来定义属性。</p>
<blockquote>
<p>function &lt;构造函数名&gt; [(&lt;参数&gt;)] {<br />&nbsp; ...<br />&nbsp; this.&lt;属性名&gt; = &lt;初始值&gt;;<br />&nbsp; ...<br />}</p>
</blockquote>
<p>然后，用 new 构造函数关键字来构造变量：</p>
<blockquote>
<p>var &lt;变量名&gt; = new &lt;构造函数名&gt;[(&lt;参数&gt;)];</p>
</blockquote>
<p>构造变量以后，&lt;变量名&gt;成为一个对象，它有它自己的属性&mdash;&mdash;用 this 在 function 里设定的属性。</p>
<p>以下是一个从网上找到的搜集浏览器详细资料的自定义构造函数的例子：</p>
<blockquote>
<p>function Is() {<br />&nbsp; var agent = navigator.userAgent.toLowerCase();<br />&nbsp; this.major = parseInt(navigator.appVersion);&nbsp; //主版本号<br />&nbsp; this.minor = parseFloat(navigator.appVersion);//全版本号<br />&nbsp; this.ns = ((agent.indexOf('mozilla')!=-1) &amp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((agent.indexOf('spoofer')==-1) &amp;&amp; //是否 Netscape<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (agent.indexOf('compatible') == -1)));<br />&nbsp; this.ns2 = (this.ns &amp;&amp; (this.major == 3));&nbsp;&nbsp;&nbsp; //是否 Netscape 2<br />&nbsp; this.ns3 = (this.ns &amp;&amp; (this.major == 3));&nbsp;&nbsp;&nbsp; //是否 Netscape 3<br />&nbsp; this.ns4b = (this.ns &amp;&amp; (this.minor &lt; 4.04)); //是否 Netscape 4 低版本<br />&nbsp; this.ns4 = (this.ns &amp;&amp; (this.major &gt;= 4));&nbsp;&nbsp;&nbsp; //是否 Netscape 4 高版本<br />&nbsp; this.ie = (agent.indexOf("msie") != -1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否 IE<br />&nbsp; this.ie3 = (this.ie &amp;&amp; (this.major == 2));&nbsp;&nbsp;&nbsp; //是否 IE 3<br />&nbsp; this.ie4 = (this.ie &amp;&amp; (this.major &gt;= 4));&nbsp;&nbsp;&nbsp; //是否 IE 4<br />&nbsp; this.op3 = (agent.indexOf("opera") != -1);&nbsp;&nbsp;&nbsp; //是否 Opera 3<br />&nbsp; this.win = (agent.indexOf("win")!=-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否 Windows 版本<br />&nbsp; this.mac = (agent.indexOf("mac")!=-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否 Macintosh 版本<br />&nbsp; this.unix = (agent.indexOf("x11")!=-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否 Unix 版本<br />}<br /><br />var is = new Is();</p>
</blockquote>
<p>这个构造函数非常完整的搜集了浏览器的信息。我们看到它为对象定义了很多个属性：major, minor, ns, ie, win, mac 等等。它们的意思见上面的注释。把 is 变量定义为 Is() 对象后，用 if (is.ns) 这种格式就可以很方便的知道浏览器的信息了。我们也可以从这个构造函数中看到，它也可以使用一般的 JavaScript 语句（上例中为 var 语句）。</p>
<p>让我们再来看一个使用参数的构造函数：</p>
<blockquote>
<p>function myFriend(theName, gender, theAge, birthOn, theJob) {<br />&nbsp; this.name = theName;<br />&nbsp; this.isMale = (gender.toLowerCase == 'male');<br />&nbsp; this.age = theAge;<br />&nbsp; this.birthday = new Date(birthOn);<br />&nbsp; this.job = theJob<br />}</p>
<p>var Stephen = new myFriend('Stephen', 'Male', 18, 'Dec 22, 1982', 'Student');</p>
</blockquote>
<p>从这个构造函数我们不但看到了参数的用法，还看到了不同的属性用不同的数据型是可以的（上例五个属性分别为：字符串，布尔值，数字，日期，字符串），还看到了构造函数里也可以用构造函数来&ldquo;构造&rdquo;属性。如果用了足够的&ldquo;保护措施&rdquo;来避免无限循环，更可以用构造函数自身来构造自己的属性。</p>
<h2><a name="使用框架和Cookies">使用框架和Cookies</a></h2>
<h3><a name="使用框架">使用框架</a></h3>
<p>　　在讲述 window 对象的时候，我们提到过，一个框架内的网页也是 window 对象，也就是说，Frame 对象也是 window 对象。用最容易理解的话说，每一个 HTML 文件占用一个 window 对象，包括定义框架的网页（&ldquo;框架网页&rdquo;）。在 IE 里用&ldquo;&lt;iframe&gt;&rdquo;标记在文档中插入的框架也是 window 对象，但是用&ldquo;包含网页&rdquo;的方法（在 HTML 中显示为&ldquo;&lt;!--webbot bot="include" ...--&gt;&rdquo;）读取的 HTML 就不占用独自的 window 对象。每一个框架都是包含它的页的 window 对象的一个子对象（不知道应该叫&ldquo;属性&rdquo;不该），要引用它，可以用以下几种方法之一：</p>
<blockquote>
<p>window.frames[x]<br />window.frames['frameName']<br />window.frameName</p>
</blockquote>
<p>　　其中，x 指的是该 window 对象中指定的第几个框架，与其它数组一样，x 也是从零开始的。frameName 指的是该框架的名字，跟&lt;frame&gt;里的&ldquo;name&rdquo;属性一样。</p>
<p>　　如果使用 window.frameName 指定的 window 对象又是一个框架网页，那么引用它的框架的方法：window.frameName.subFrameName。以此类推。</p>
<p>　　要注意的时，无论在何处，引用&ldquo;window&rdquo;对象所返回的，都是&ldquo;当前&rdquo;window 对象。如果要访问其它 window 对象，就要用到 parent 和 top 属性。parent 指的是&ldquo;父级&rdquo;window 对象，也就是包含当前 window 对象的框架网页；top 指的是窗口最顶端的 window 对象。</p>
<p>　　使用框架还要密切留意你的 JavaScript 中定义的全局变量和自定义函数。它们都有它们的所属&mdash;&mdash;所在的 window 对象。要引用其它框架中的全局变量或自定义函数，都要用&ldquo;窗口对象.框架对象[.框架对象&hellip;].全局变量或自定义函数&rdquo;这种很烦的方法。</p>
<p>　　以上这个问题在建立连接时经常会被忽略：如果在&lt;head&gt;中定义了一个默认目标窗口（&lt;base target="..."&gt;），在&lt;a href="javascript:..."&gt;中，要知道输入的 JavaScript 语句是在默认目标窗口中运行的，必要时加一些&ldquo;parent&rdquo;&ldquo;top&rdquo;属性。</p>
<h3><a name="使用 Cookies">使用 Cookies</a></h3>
<p>　　我们已经知道，在 document 对象中有一个 cookie 属性。但是 Cookie 又是什么？&ldquo;某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息，这些文件就称为 Cookie。&rdquo;&mdash;&mdash; MSIE 帮助。一般来说，Cookies 是 CGI 或类似，比 HTML 高级的文件、程序等创建的，但是 JavaScript 也提供了对 Cookies 的很全面的访问权利。</p>
<p>　　在继续之前，我们先要学一学 <strong><a name="Cookie 的基本知识">Cookie 的基本知识</a></strong>。</p>
<p>　　每个 Cookie 都是这样的：&lt;cookie名&gt;=&lt;值&gt;</p>
<p>　　&lt;cookie名&gt;的限制与 JavaScript 的命名限制大同小异，少了&ldquo;不能用 JavaScript 关键字&rdquo;，多了&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。后者比较难懂，但是只要你只用字母和数字命名，就完全没有问题了。&lt;值&gt;的要求也是&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。</p>
<p>　　每个 Cookie 都有失效日期，一旦电脑的时钟过了失效日期，这个 Cookie 就会被删掉。我们不能直接删掉一个 Cookie，但是可以用设定失效日期早于现在时刻的方法来间接删掉它。</p>
<p>　　每个网页，或者说每个站点，都有它自己的 Cookies，这些 Cookies 只能由这个站点下的网页来访问，来自其他站点或同一站点下未经授权的区域的网页，是不能访问的。每一&ldquo;组&rdquo;Cookies 有规定的总大小（大约 2KB 每&ldquo;组&rdquo;），一超过最大总大小，则最早失效的 Cookie 先被删除，来让新的 Cookie&ldquo;安家&rdquo;。</p>
<p>　　现在我们来学习<strong><a name="使用 document.cookie 属性">使用 document.cookie 属性</a></strong>。</p>
<p>　　如果直接使用 document.cookie 属性，或者说，用某种方法，例如给变量赋值，来获得 document.cookie 的值，我们就可以知道在现在的文档中有多少个 Cookies，每个 Cookies 的名字，和它的值。例如，在某文档中添加&ldquo;document.write(document.cookie)&rdquo;，结果显示：</p>
<blockquote>
<p>name=kevin; email=kevin@kevin.com; lastvisited=index.html</p>
</blockquote>
<p>这意味着，文档包含 3 个 Cookies：name, email 和 lastvisited，它们的值分别是 kevin, kevin@kevin.com 和 index.html。可以看到，两个 Cookies 之间是用分号和空格隔开的，于是我们可以用 cookieString.split('; ') 方法得到每个 Cookie 分开的一个数组（先用 var cookieString = document.cookie）。</p>
<p>　　设定一个 Cookie 的方法是对 document.cookie 赋值。与其它情况下的赋值不同，向 document.cookie 赋值不会删除掉原有的 Cookies，而只会增添 Cookies 或更改原有 Cookie。赋值的格式：</p>
<blockquote>
<p>document.cookie = '<strong>cookieName</strong>=' + <span style="text-decoration: underline;">escape</span>('<strong>cookieValue</strong>')<br />&nbsp;&nbsp;&nbsp;&nbsp; + '<span style="text-decoration: underline;">;</span>expires=' + <strong>expirationDateObj</strong>.<span style="text-decoration: underline;">toGMTString()</span>;</p>
</blockquote>
<p>是不是看到头晕了呢？以上不是粗体字的地方是要照抄不误的，粗体字是要按实际情况做出改动的。cookieName 表示 Cookie 的名称，cookieValue 表示 Cookie 的值，expirationDateObj 表示储存着失效日期的日期对象名，如果不需要指定失效日期，则不需要第二行。不指定失效日期，则浏览器默认是在关闭浏览器（也就是关闭所有窗口）之后过期。</p>
<p>　　看到了上面的一些下划线了么？这些是应该注意的地方。<br />　　首先 escape() 方法：为什么一定要用？因为 Cookie 的值的要求是&ldquo;只能用可以用在 URL 编码中的字符&rdquo;。我们知道&ldquo;escape()&rdquo;方法是把字符串按 URL 编码方法来编码的，那我们只需要用一个&ldquo;escape()&rdquo;方法来处理输出到 Cookie 的值，用&ldquo;unescape()&rdquo;来处理从 Cookie 接收过来的值就万无一失了。而且这两个方法的最常用途就是处理 Cookies。其实设定一个 Cookie 只是&ldquo;document.cookie = 'cookieName=cookieValue'&rdquo;这么简单，但是为了避免在 cookieValue 中出现 URL 里不准出现的字符，还是用一个 escape() 好。<br />　　然后&ldquo;expires&rdquo;前面的分号：注意到就行了。是分号而不是其他。<br />　　最后 toGMTString() 方法：设定 Cookie 的时效日期都是用 GMT 格式的时间的，其它格式的时间是没有作用的。</p>
<p>　　现在我们来实战一下。设定一个&ldquo;name=rose&rdquo;的 Cookie，在 3 个月后过期。</p>
<blockquote>
<p>var expires = new Date();<br />expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);<br />/*&nbsp;&nbsp; 三个月 x 一个月当作 30 天 x 一天 24 小时<br />&nbsp;&nbsp; x 一小时 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */<br />document.cookie = 'name=rose;expires=' + expires.toGMTString();</p>
</blockquote>
<p>为什么没有用 escape() 方法？这是因为我们知道 rose 是一个合法的 URL 编码字符串，也就是说，'rose' == escape('rose')。一般来说，如果设定 Cookie 时不用 escape()，那获取 Cookie 时也不用 unescape()。</p>
<p>　　再来一次：编写一个函数，作用是查找指定 Cookie 的值。</p>
<blockquote>
<p>function getCookie(cookieName) {<br />&nbsp; var cookieString = document.cookie;<br />&nbsp; var start = cookieString.indexOf(cookieName + '=');<br />&nbsp; // 加上等号的原因是避免在某些 Cookie 的值里有<br />&nbsp; // 与 cookieName 一样的字符串。<br />&nbsp; if (start == -1) // 找不到<br />&nbsp;&nbsp;&nbsp; return null;<br />&nbsp; start += cookieName.length + 1;<br />&nbsp; var end = cookieString.indexOf(';', start);<br />&nbsp; if (end == -1) return unescape(cookieString.substring(start));<br />&nbsp; return unescape(cookieString.substring(start, end));<br />}</p>
</blockquote>
<p>这个函数用到了字符串对象的一些方法，如果你不记得了（你是不是这般没记性啊），请快去查查。这个函数所有的 if 语句都没有带上 else，这是因为如果条件成立，程序运行的都是 return 语句，在函数里碰上 return，就会终止运行，所以不加 else 也没问题。该函数在找到 Cookie 时，就会返回 Cookie 的值，否则返回&ldquo;null&rdquo;。</p>
<p>　　现在我们要删除刚才设定的 name=rose Cookie。</p>
<blockquote>
<p>var expires = new Date();<br />expires.setTime(expires.getTime() - 1);<br />document.cookie = 'name=rose;expires=' + expires.toGMTString();</p>
</blockquote>
<p>可以看到，只需要把失效日期改成比现在日期早一点（这里是早 1 毫秒），再用同样的方法设定 Cookie，就可以删掉 Cookie 了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/196762#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 21:53:32 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/196762</link>
        <guid>http://yunmanfan.javaeye.com/blog/196762</guid>
      </item>
      <item>
        <title>JavaScript的学习笔记（3）文档对象</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196760" style="color:red;">http://yunmanfan.javaeye.com/blog/196760</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在我们将开始讨论更“实际”的话题——文档对象(DOM)。文档对象是指在网页文档里划分出来的对象。在 JavaScript 能够涉及的范围内有如下几个“大”对象：window, document, location, navigator, screen, history 等。下面是一个文档对象树，你可以看到对象下包含对象的“壮观”情景。要引用某个对象，就要把父级的对象都列出来。例如，要引用某表单“applicationForm”的某文字框“customerName”，就要用“document.applicationForm.customerName”。<br /><br />下表中有些对象是全小写的，有些是以大写字母开头的。以大写字母开头的对象表示，引用该对象不使用下表列出的名字，而直接用对象的“名字”（Id 或 Name，下面有讲解），或用它所属的对象数组指定。<br /><br />这里我们不准备讲解对象的“事件”，虽然我们也会列出对象所能响应的事件。我们将会在下一章“事件处理”中讲解事件。<br /><br />navigator <br />screen <br />window <br />history <br />location <br />frames[]; Frame <br />document <br />anchors[]; links[]; Link <br />applets[] <br />embeds[] <br />forms[]; Form <br />Button <br />Checkbox <br />elements[]; Element <br />Hidden <br />Password <br />Radio <br />Reset <br />Select <br />options[]; Option <br />Submit <br />Text <br />Textarea <br />images[]; Image <br /> 浏览器对象<br />屏幕对象<br />窗口对象<br />　历史对象<br />　地址对象<br />　框架对象<br />　文档对象<br />　　连接对象<br />　　Java小程序对象<br />　　插件对象<br />　　表单对象<br />　　　按钮对象<br />　　　复选框对象<br />　　　表单元素对象<br />　　　隐藏对象<br />　　　密码输入区对象<br />　　　单选域对象<br />　　　重置按钮对象<br />　　　选择区（下拉菜单、列表）对象<br />　　　　选择项对象<br />　　　提交按钮对象<br />　　　文本框对象<br />　　　多行文本输入区对象<br />　　图片对象  <br /><br />navigator 浏览器对象 反映了当前使用的浏览器的资料。<br /><br />属性<br /><br />appCodeName 返回浏览器的“码名”(?)，流行的 IE 和 NN 都返回 'Mozilla'。<br />appName 返回浏览器名。IE 返回 'Microsoft Internet Explorer'，NN 返回 'Netscape'。<br />appVersion 返回浏览器版本，包括了大版本号、小版本号、语言、操作平台等信息。<br />platform 返回浏览器的操作平台，对于 Windows 9x 上的浏览器，返回 'Win32'（大小写可能有差异）。<br />userAgent 返回以上全部信息。例如，IE5.01 返回 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)'。<br />javaEnabled() 返回一个布尔值，代表当前浏览器允许不允许 Java。<br /><br />screen 屏幕对象 反映了当前用户的屏幕设置。<br /><br />属性<br /><br />width 返回屏幕的宽度（像素数）。<br />height 返回屏幕的高度。<br />availWidth 返回屏幕的可用宽度（除去了一些不自动隐藏的类似任务栏的东西所占用的宽度）。<br />availHeight 返回屏幕的可用高度。<br />colorDepth 返回当前颜色设置所用的位数 - 1：黑白；8：256色；16：增强色；24/32：真彩色<br /><br />window 窗口对象 最大的对象，它描述的是一个浏览器窗口。一般要引用它的属性和方法时，不需要用“window.xxx”这种形式，而直接使用“xxx”。一个框架页面也是一个窗口。<br /><br />属性<br /><br />name 窗口的名称，由打开它的连接（&lt;a target="...">）或框架页（&lt;frame name="...">）或某一个窗口调用的 open() 方法（见下）决定。一般我们不会用这个属性。<br />status 指窗口下方的“状态栏”所显示的内容。通过对 status 赋值，可以改变状态栏的显示。<br />opener 用法：window.opener；返回打开本窗口的窗口对象。注意：返回的是一个窗口对象。如果窗口不是由其他窗口打开的，在 Netscape 中这个属性返回 null；在 IE 中返回“未定义”（undefined）。undefined 在一定程度上等于 null。注意：undefined 不是 JavaScript 常数，如果你企图使用“undefined”，那就真的返回“未定义”了。<br />self 指窗口本身，它返回的对象跟 window 对象是一模一样的。最常用的是“self.close()”，放在&lt;a>标记中：“&lt;a href="javascript:self.close()">关闭窗口&lt;/a>”。<br />parent 返回窗口所属的框架页对象。<br />top 返回占据整个浏览器窗口的最顶端的框架页对象。<br />history 历史对象，见下。<br />location 地址对象，见下。<br />document 文档对象，见下。<br /><br />方法<br /><br />open() 打开一个窗口。用法：open(&lt;URL字符串>, &lt;窗口名称字符串>, &lt;参数字符串>);<br />　　&lt;URL字符串>：描述所打开的窗口打开哪一个网页。如果留空（''），则不打开任意网页。<br />　　&lt;窗口名称字符串>：描述被打开的窗口的名称（window.name），可以使用'_top'、'_blank'等内建名称。这里的名称跟“&lt;a href="..." target="...">”里的“target”属性是一样的。<br />　　&lt;参数字符串>：描述被打开的窗口的样貌。如果只需要打开一个普通窗口，该字符串留空（''），如果要指定样貌，就在字符串里写上一到多个参数，参数之间用逗号隔开。<br /><br />例：打开一个 400 x 100 的干净的窗口：<br />open('','_blank','width=400,height=100,menubar=no,toolbar=no,<br />location=no,directories=no,status=no,scrollbars=yes,resizable=yes')<br /><br />参数<br />  <br />top=# 窗口顶部离开屏幕顶部的像素数 <br />left=# 窗口左端离开屏幕左端的像素数 <br />width=# 窗口的宽度 <br />height=# 窗口的高度 <br />menubar=... 窗口有没有菜单，取值yes或no <br />toolbar=... 窗口有没有工具条，取值yes或no <br />location=... 窗口有没有地址栏，取值yes或no <br />directories=... 窗口有没有连接区，取值yes或no <br />scrollbars=... 窗口有没有滚动条，取值yes或no <br />status=... 窗口有没有状态栏，取值yes或no <br />resizable=... 窗口给不给调整大小，取值yes或no <br /><br />open() 方法有返回值，返回的就是它打开的窗口对象。所以，<br /><br />var newWindow = open('','_blank');<br /><br />这样把一个新窗口赋值到“newWindow”变量中，以后通过“newWindow”变量就可以控制窗口了。<br /><br />close() 关闭一个已打开的窗口。<br />用法：window.close() 或 self.close()：关闭本窗口；<br />　　　&lt;窗口对象>.close()：关闭指定的窗口。<br />　　如果该窗口有状态栏，调用该方法后浏览器会警告：“网页正在试图关闭窗口，是否关闭？”然后等待用户选择是否；如果没有状态栏，调用该方法将直接关闭窗口。<br />blur() 使焦点从窗口移走，窗口变为“非活动窗口”。<br />focus() 是窗口获得焦点，变为“活动窗口”。不过在 Windows 98，该方法只能使窗口的标题栏和任务栏上的相应按钮闪烁，提示用户该窗口正在试图获得焦点。<br />scrollTo() 用法：[&lt;窗口对象>.]scrollTo(x, y)；使窗口滚动，使文档从左上角数起的(x, y)点滚动到窗口的左上角。<br />scrollBy() 用法：[&lt;窗口对象>.]scrollBy(deltaX, deltaY)；使窗口向右滚动 deltaX 像素，向下滚动 deltaY 像素。如果取负值，则向相反的方向滚动。<br />resizeTo() 用法：[&lt;窗口对象>.]resizeTo(width, height)；使窗口调整大小到宽 width 像素，高 height 像素。<br />resizeBy() 用法：[&lt;窗口对象>.]resizeBy(deltaWidth, deltaHeight)；使窗口调整大小，宽增大 deltaWidth 像素，高增大 deltaHeight 像素。如果取负值，则减少。<br />alert() 用法：alert(&lt;字符串>)；弹出一个只包含“确定”按钮的对话框，显示&lt;字符串>的内容，整个文档的读取、Script 的运行都会暂停，直到用户按下“确定”。<br />confirm() 用法：confirm(&lt;字符串>)；弹出一个包含“确定”和“取消”按钮的对话框，显示&lt;字符串>的内容，要求用户做出选择，整个文档的读取、Script 的运行都会暂停。如果用户按下“确定”，则返回 true 值，如果按下“取消”，则返回 false 值。<br />prompt() 用法：prompt(&lt;字符串>[, &lt;初始值>])；弹出一个包含“确认”“取消”和一个文本框的对话框，显示&lt;字符串>的内容，要求用户在文本框输入一些数据，整个文档的读取、Script 的运行都会暂停。如果用户按下“确认”，则返回文本框里已有的内容，如果用户按下“取消”，则返回 null 值。如果指定&lt;初始值>，则文本框里会有默认值。<br /><br />事件<br /><br />onload; onunload; onresize; onblur; onfocus; onerror<br /><br />history 历史对象 历史对象指浏览器的浏览历史。鉴于安全性的需要，该对象收到很多限制，现在只剩下下列属性和方法。<br /><br />属性<br /><br />length 历史的项数。JavaScript 所能管到的历史被限制在用浏览器的“前进”“后退”键可以去到的范围。本属性返回的是“前进”和“后退”两个按键之下包含的地址数的和。<br /><br />方法<br /><br />back() 后退，跟按下“后退”键是等效的。<br />forward() 前进，跟按下“前进”键是等效的。<br />go() 用法：history.go(x)；在历史的范围内去到指定的一个地址。如果 x &lt; 0，则后退 x 个地址，如果 x > 0，则前进 x 个地址，如果 x == 0，则刷新现在打开的网页。history.go(0) 跟 location.reload() 是等效的。<br /><br />location 地址对象 它描述的是某一个窗口对象所打开的地址。要表示当前窗口的地址，只需要使用“location”就行了；若要表示某一个窗口的地址，就使用“&lt;窗口对象>.location”。<br /><br />注意 属于不同协议或不同主机的两个地址之间不能互相引用对方的 location 对象，这是出于安全性的需要。例如，当前窗口打开的是“www.a.com”下面的某一页，另外一个窗口（对象名为：bWindow）打开的是“www.b.com”的网页。如果在当前窗口使用“bWindow.location”，就会出错：“没有权限”。这个错误是不能用错误处理程序（Event Handler，参阅 onerror 事件)来接收处理的。<br /><br />属性<br /><br />protocol 返回地址的协议，取值为 'http:','https:','file:' 等等。<br />hostname 返回地址的主机名，例如，一个“http://www.microsoft.com/china/”的地址，location.hostname == 'www.microsoft.com'。<br />port 返回地址的端口号，一般 http 的端口号是 '80'。<br />host 返回主机名和端口号，如：'www.a.com:8080'。<br />pathname 返回路径名，如“http://www.a.com/b/c.html”，location.pathname == 'b/c.html'。<br />hash 返回“#”以及以后的内容，如“http://www.a.com/b/c.html#chapter4”，location.hash == '#chapter4'；如果地址里没有“#”，则返回空字符串。<br />search 返回“?”以及以后的内容，如“http://www.a.com/b/c.asp?selection=3&jumpto=4”，location.search == '?selection=3&jumpto=4'；如果地址里没有“?”，则返回空字符串。<br />href 返回以上全部内容，也就是说，返回整个地址。在浏览器的地址栏上怎么显示它就怎么返回。如果想一个窗口对象打开某地址，可以使用“location.href = '...'”，也可以直接用“location = '...'”来达到此目的。<br /><br />方法<br /><br />reload() 相当于按浏览器上的“刷新”(IE)或“Reload”(Netscape)键。<br />replace() 打开一个 URL，并取代历史对象中当前位置的地址。用这个方法打开一个 URL 后，按下浏览器的“后退”键将不能返回到刚才的页面。<br /><br />frames[]; Frame 框架对象 请参阅“使用框架和 Cookies”一章。<br /><br />document 文档对象 描述当前窗口或指定窗口对象的文档。它包含了文档从&lt;head>到&lt;/body>的内容。<br />　　用法：document （当前窗口）<br />　　　或 &lt;窗口对象>.document （指定窗口）<br /><br />属性<br /><br />cookie 关于 cookie 请参看“使用框架和 Cookies”一章。<br />lastModified 当前文档的最后修改日期，是一个 Date 对象。<br />referrer 如果当前文档是通过点击连接打开的，则 referrer 返回原来的 URL。<br />title 指&lt;head>标记里用&lt;title>...&lt;/title>定义的文字。在 Netscape 里本属性不接受赋值。<br />fgColor 指&lt;body>标记的 text 属性所表示的文本颜色。<br />bgColor 指&lt;body>标记的 bgcolor 属性所表示的背景颜色。<br />linkColor 指&lt;body>标记的 link 属性所表示的连接颜色。<br />alinkColor 指&lt;body>标记的 alink 属性所表示的活动连接颜色。<br />vlinkColor 指&lt;body>标记的 vlink 属性所表示的已访问连接颜色。<br /><br />方法<br /><br />open() 打开文档以便 JavaScript 能向文档的当前位置（指插入 JavaScript 的位置）写入数据。通常不需要用这个方法，在需要的时候 JavaScript 自动调用。<br />write(); writeln() 向文档写入数据，所写入的会当成标准文档 HTML 来处理。writeln() 与 write() 的不同点在于，writeln() 在写入数据以后会加一个换行。这个换行只是在 HTML 中换行，具体情况能不能够是显示出来的文字换行，要看插入 JavaScript 的位置而定。如在&lt;pre>标记中插入，这个换行也会体现在文档中。<br />clear() 清空当前文档。<br />close() 关闭文档，停止写入数据。如果用了 write[ln]() 或 clear() 方法，就一定要用 close() 方法来保证所做的更改能够显示出来。如果文档还没有完全读取，也就是说，JavaScript 是插在文档中的，那就不必使用该方法。<br /><br />现在我们已经拥有足够的知识来做以下这个很多网站都有的弹出式更新通知了。<br /><br />&lt;script language="JavaScript"><br />&lt;!--<br />var whatsNew = open('','_blank','top=50,left=50,width=200,height=300,' +<br />                'menubar=no,toolbar=no,directories=no,location=no,' +<br />                'status=no,resizable=no,scrollbars=yes');<br />whatsNew.document.write('&lt;center>&lt;b>更新通知&lt;/b>&lt;/center>');<br />whatsNew.document.write('&lt;p>最后更新日期：00.08.01');<br />whatsNew.document.write('&lt;p>00.08.01：增加了“我的最爱”栏目。');<br />whatsNew.document.write('&lt;p align="right">' +<br />                '&lt;a href="javascript:self.close()">关闭窗口&lt;/a>');<br />whatsNew.document.close();<br />--><br />&lt;/script><br /><br />当然也可以先写好一个 HTML 文件，在 open() 方法中直接 load 这个文件。<br /><br />anchors[]; links[]; Link 连接对象<br /><br />用法：document.anchors[[x]]; document.links[[x]]; &lt;anchorId>; &lt;linkId><br />　　document.anchors 是一个数组，包含了文档中所有锚标记（包含 name 属性的&lt;a>标记），按照在文档中的次序，从 0 开始给每个锚标记定义了一个下标。<br />　　document.links 也是一个数组，包含了文档中所有连接标记（包含 href 属性的&lt;a>标记和&lt;map>标记段里的&lt;area>标记），按照在文档中的次序，从 0 开始给每个连接标记定义了一个下标。<br />　　如果一个&lt;a>标记既有 name 属性，又有 href 属性，则它既是一个 Anchor 对象，又是一个 Link 对象。<br />　　在 IE 中，如果在&lt;a>标记中添加“id="..."”属性，则这个&lt;a>对象被赋予一个标识（ID），调用这个对象的时候只需要使用“&lt;id>”就行了。很多文档部件都可以用这个方法来赋予 ID，但要注意不能有两个 ID 相同。<br /><br />anchors 和 links 作为数组，有数组的属性和方法。单个 Anchor 对象没有属性；单个 Link 对象的属性见下。<br /><br />属性<br /><br />protocol; hostname; port; host; pathname; hash; search; href 与 location 对象相同。<br />target 返回/指定连接的目标窗口（字符串），与&lt;a>标记里的 target 属性是一样的。<br /><br />事件<br /><br />onclick; onmouseover; onmouseout; onmousedown; onmouseup<br /><br />applets[] Java小程序对象 它是一个数组，包含了文档中所有的 Applet 对象（Java 小程序）。作为一个数组，有数组的属性和方法。关于单个 Applet 对象的属性和方法，我引用一句话：“Applet 对象继承了 Java 小程序的所有公共属性和方法。”(英文原句：The Applet object inherits all public properties of the Java applet./The Applet object inherits all public methodss of the Java applet.) 因为本人很厌恶 Java 小程序，所以对它的什么“公共”“私有”的问题不感兴趣，也就没有探讨了。<br /><br />embeds[] 插件对象 它是一个数组，包含了文档中所有的插件（&lt;embed>标记）。因为每个插件的不同，每个 Embed 对象也有不同的属性和方法。<br /><br />forms[]; Form 表单对象 document.forms[] 是一个数组，包含了文档中所有的表单（&lt;form>）。要引用单个表单，可以用 document.forms[x]，但是一般来说，人们都会这样做：在&lt;form>标记中加上“name="..."”属性，那么直接用“document.&lt;表单名>”就可以引用了。<br /><br />Form 对象的属性<br /><br />name 返回表单的名称，也就是&lt;form name="...">属性。<br />action 返回/设定表单的提交地址，也就是&lt;form action="...">属性。<br />method 返回/设定表单的提交方法，也就是&lt;form method="...">属性。<br />target 返回/设定表单提交后返回的窗口，也就是&lt;form target="...">属性。<br />encoding 返回/设定表单提交内容的编码方式，也就是&lt;form enctype="...">属性。<br />length 返回该表单所含元素的数目。<br /><br />方法<br /><br />reset() 重置表单。这与按下“重置”按钮是一样的。<br />submit() 提交表单。这与按下“提交”按钮是一样的。<br /><br />事件<br /><br />onreset; onsubmit<br /><br />以下从“Button”到“Textarea”都是表单的元素对象。<br /><br />Button 按钮对象 由“&lt;input type="button">”指定。引用一个 Button 对象，可以使用“&lt;文档对象>.&lt;表单对象>.&lt;按钮名称>”。&lt;按钮名称>指在&lt;input>标记中的“name="..."”属性的值。引用任意表单元素都可以用这种方法。<br /><br />属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />value 返回/设定用&lt;input value="...">指定的元素的值。<br />form 返回包含本元素的表单对象。<br /><br />方法<br /><br />blur() 从对象中移走焦点。<br />focus() 让对象获得焦点。<br />click() 模拟鼠标点击该对象。<br /><br />事件<br /><br />onclick; onmousedown; onmouseup<br /><br />Checkbox 复选框对象 由“&lt;input type="checkbox">”指定。<br /><br />属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />value 返回/设定用&lt;input value="...">指定的元素的值。<br />form 返回包含本元素的表单对象。<br />checked 返回/设定该复选框对象是否被选中。这是一个布尔值。<br />defaultChecked 返回/设定该复选框对象默认是否被选中。这是一个布尔值。<br /><br />方法<br /><br />blur() 从对象中移走焦点。<br />focus() 让对象获得焦点。<br />click() 模拟鼠标点击该对象。<br /><br />事件<br /><br />onclick<br /><br />elements[]; Element 表单元素对象 &lt;表单对象>.elements 是一个数组，包含了该表单所有的对象。一般我们不用该数组，而直接引用各个具体的对象。<br /><br />Hidden 隐藏对象 由“&lt;input type="hidden">”指定。<br /><br />属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />value 返回/设定用&lt;input value="...">指定的元素的值。<br />form 返回包含本元素的表单对象。<br /><br />Password 密码输入区对象 由“&lt;input type="password">”指定。<br /><br />属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />value 返回/设定密码输入区当前的值。<br />defaultValue 返回用&lt;input value="...">指定的默认值。<br />form 返回包含本元素的表单对象。<br /><br />方法<br /><br />blur() 从对象中移走焦点。<br />focus() 让对象获得焦点。<br />select() 选中密码输入区里全部文本。<br /><br />事件<br /><br />onchange<br /><br />Radio 单选域对象 由“&lt;input type="radio">”指定。一组 Radio 对象有共同的名称（name 属性），这样的话，document.formName.radioName 就成了一个数组。要访问单个 Radio 对象就要用：document.formName.radioName[x]。<br /><br />单个 Radio 对象的属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />value 返回/设定用&lt;input value="...">指定的元素的值。<br />form 返回包含本元素的表单对象。<br />checked 返回/设定该单选域对象是否被选中。这是一个布尔值。<br />defaultChecked 返回/设定该对象默认是否被选中。这是一个布尔值。<br /><br />方法<br /><br />blur() 从对象中移走焦点。<br />focus() 让对象获得焦点。<br />click() 模拟鼠标点击该对象。<br /><br />事件<br /><br />onclick<br /><br />Reset 重置按钮对象 由“&lt;input type="reset">”指定。因为 Reset 也是按钮，所以也有 Button 对象的属性和方法。至于“onclick”事件，一般用 Form 对象的 onreset 代替。<br /><br />Select 选择区（下拉菜单、列表）对象 由“&lt;select>”指定。<br /><br />属性<br /><br />name 返回/设定用&lt;input name="...">指定的元素名称。<br />length 返回 Select 对象下选项的数目。<br />selectedIndex 返回被选中的选项的下标。这个下标就是在 options[] 数组中该选项的位置。如果 Select 对象允许多项选择，则返回第一个被选中的选项的下标。<br />form 返回包含本元素的表单对象。<br /><br />方法<br /><br />blur() 从对象中移走焦点。<br />focus() 让对象获得焦点。<br /><br />事件<br /><br />onchange<br /><br />options[]; Option 选择项对象 options[] 是一个数组，包含了在同一个 Select 对象下的 Option 对象。Option 对象由“&lt;select>”下的“&lt;options>”指定。<br /><br />options[] 数组的属性<br /><br />length; selectedIndex 与所属 Select 对象的同名属性相同。<br /><br />单个 Option 对象的属性<br /><br />text 返回/指定 Option 对象所显示的文本<br />value 返回/指定 Option 对象的值，与&lt;options value="...">一致。<br />index 返回该 Option 对象的下标。对此并没有什么好说，因为要指定特定的一个 Option 对象，都要先知道该对象的下标。这个属性好像没有什么用。<br />selected 返回/指定该对象是否被选中。通过指定 true 或者 false，可以动态的改变选中项。<br />defaultSelected 返回该对象默认是否被选中。true / false。<br /><br />Submit 提交按钮对象 由“&lt;input type="submit">指定。因为 Submit 也是按钮，所以也有 Button 对象的属性和方法。至于“onclick”事件，一般用 Form 对象的 onsubmit 代替。<br /><br />Text 文本框对象 由“&lt;input type="text">”指定。Password 对象也是 Text 对象的一种，所以 Password 对象所有的属性、方法和事件，Text 对象都有。<br /><br />Textarea 多行文本输入区对象 由“&lt;textarea>”指定。Textarea 对象所有的属性、方法和事件和 Text 对象相同，也就是跟 Password 对象一样。<br /><br />images[]; Image 图片对象 document.images[] 是一个数组，包含了文档中所有的图片（&lt;img>）。要引用单个图片，可以用 document.images[x]。如果某图片包含“name”属性，也就是用“&lt;img name="...">”这种格式定义了一幅图片，就可以使用“document.images['...']”这种方法来引用图片。在 IE 中，如果某图片包含 ID 属性，也就是用“&lt;img id="...">”这种格式定义了一幅图片，就可以直接使用“&lt;imageID>”来引用图片。<br /><br />单个 Image 对象的属性<br /><br />name; src; lowsrc; width; height; vspace; hspace; border 这些属性跟&lt;img>标记里的同名属性是一样的。在 Netscape 里，除了 src 属性，其它属性（几乎全部）都不能改的，即使改了，在文档中也不能显示出效果来。这些属性最有用的就是 src 了，通过对 src 属性赋值，可以实时的更改图片。<br /><br />事件<br /><br />onclick<br /><br />不显示在文档中的 Image 对象<br /><br />不显示在文档中的 Image 对象是用 var 语句定义的：<br /><br />var myImage = new Image(); 或<br />var myImage = new Image(&lt;图片地址字符串>);<br /><br />然后就可以像一般 Image 对象一样对待 myImage 变量了。不过既然它不显示在文档中，以下属性：lowsrc, width, height, vspace, hspace, border 就没有什么用途了。一般这种对象只有一个用：预读图片(preload)。因为当对对象的 src 属性赋值的时候，整个文档的读取、JavaScript 的运行都暂停，让浏览器专心的读取图片。预读图片以后，浏览器的缓存里就有了图片的 Copy，到真正要把图片放到文档中的时候，图片就可以立刻显示了。现在的网页中经常会有一些图像连接，当鼠标指向它的时候，图像换成另外一幅图像，它们都是先预读图像的。<br /><br />预读图像的 JavaScript 例子<br /><br />var imagePreload = new Image();<br /><br />imagePreload.src = '001.gif';<br />imagePreload.src = '002.gif';<br />imagePreload.src = '003.gif';<br /><br />以上例子适合预读少量图片。<br /><br />function imagePreload() {<br />  var imgPreload = new Image();<br />  for (i = 0; i &lt; arguments.length; i++) {<br />    imgPreload.src = arguments[i];<br />  }<br />}<br /><br />imagePreload('001.gif', '002.gif', '003.gif', '004.gif', '005.gif');<br /><br />以上例子适合预读大量图片。
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/196760#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 21:52:33 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/196760</link>
        <guid>http://yunmanfan.javaeye.com/blog/196760</guid>
      </item>
      <item>
        <title>JavaScript的学习笔记（2）对象化编程</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196755" style="color:red;">http://yunmanfan.javaeye.com/blog/196755</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JavaScript 是使用“对象化编程”的，或者叫“面向对象编程”的。所谓“对象化编程”，意思是把 JavaScript 能涉及的范围划分成大大小小的对象，对象下面还继续划分对象直至非常详细为止，所有的编程都以对象为出发点，基于对象。小到一个变量，大到网页文档、窗口甚至屏幕，都是对象。这一章将“面向对象”讲述 JavaScript 的运行情况。<br /><br />对象的基本知识<br /> 对象是可以从 JavaScript“势力范围”中划分出来的一小块，可以是一段文字、一幅图片、一个表单（Form）等等。每个对象有它自己的属性、方法和事件。对象的属性是反映该对象某些特定的性质的，例如：字符串的长度、图像的长宽、文字框（Textbox）里的文字等等；对象的方法能对该对象做一些事情，例如，表单的“提交”(Submit)，窗口的“滚动”(Scrolling)等等；而对象的事件就能响应发生在对象上的事情，例如提交表单产生表单的“提交事件”，点击连接产生的“点击事件”。不是所有的对象都有以上三个性质，有些没有事件，有些只有属性。引用对象的任一“性质”用“&lt;对象名>.&lt;性质名>”这种方法。<br /><br />基本对象<br />现在我们要复习以上学过的内容了——把一些数据类型用对象的角度重新学习一下。<br /><br />Number “数字”对象。这个对象用得很少，作者就一次也没有见过。不过属于“Number”的对象，也就是“变量”就多了。<br /><br />属性<br /><br />MAX_VALUE 用法：Number.MAX_VALUE；返回“最大值”。<br />MIN_VALUE 用法：Number.MIN_VALUE；返回“最小值”。<br />NaN 用法：Number.NaN 或 NaN；返回“NaN”。“NaN”（不是数值）在很早就介绍过了。<br />NEGATIVE_INFINITY 用法：Number.NEGATIVE_INFINITY；返回：负无穷大，比“最小值”还小的值。<br />POSITIVE_INFINITY 用法：Number.POSITIVE_INFINITY；返回：正无穷大，比“最大值”还大的值。<br /><br />方法<br /><br />toString() 用法：&lt;数值变量>.toString()；返回：字符串形式的数值。如：若 a == 123；则 a.toString() == '123'。<br /><br />String 字符串对象。声明一个字符串对象最简单、快捷、有效、常用的方法就是直接赋值。<br /><br />属性<br /><br />length 用法：&lt;字符串对象>.length；返回该字符串的长度。<br /><br />方法<br /><br />charAt() 用法：&lt;字符串对象>.charAt(&lt;位置>)；返回该字符串位于第&lt;位置>位的单个字符。注意：字符串中的一个字符是第 0 位的，第二个才是第 1 位的，最后一个字符是第 length - 1 位的。<br />charCodeAt() 用法：&lt;字符串对象>.charCodeAt(&lt;位置>)；返回该字符串位于第&lt;位置>位的单个字符的 ASCII 码。<br />fromCharCode() 用法：String.fromCharCode(a, b, c...)；返回一个字符串，该字符串每个字符的 ASCII 码由 a, b, c... 等来确定。<br />indexOf() 用法：&lt;字符串对象>.indexOf(&lt;另一个字符串对象>[, &lt;起始位置>])；该方法从&lt;字符串对象>中查找&lt;另一个字符串对象>（如果给出&lt;起始位置>就忽略之前的位置），如果找到了，就返回它的位置，没有找到就返回“-1”。所有的“位置”都是从零开始的。<br />lastIndexOf() 用法：&lt;字符串对象>.lastIndexOf(&lt;另一个字符串对象>[, &lt;起始位置>])；跟 indexOf() 相似，不过是从后边开始找。<br />split() 用法：&lt;字符串对象>.split(&lt;分隔符字符>)；返回一个数组，该数组是从&lt;字符串对象>中分离开来的，&lt;分隔符字符>决定了分离的地方，它本身不会包含在所返回的数组中。例如：'1&2&345&678'.split('&')返回数组：1,2,345,678。关于数组，我们等一下就讨论。<br />substring() 用法：&lt;字符串对象>.substring(&lt;始>[, &lt;终>])；返回原字符串的子字符串，该字符串是原字符串从&lt;始>位置到&lt;终>位置的前一位置的一段。&lt;终> - &lt;始> = 返回字符串的长度（length）。如果没有指定&lt;终>或指定得超过字符串长度，则子字符串从&lt;始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串，则返回空字符串。<br />substr() 用法：&lt;字符串对象>.substr(&lt;始>[, &lt;长>])；返回原字符串的子字符串，该字符串是原字符串从&lt;始>位置开始，长度为&lt;长>的一段。如果没有指定&lt;长>或指定得超过字符串长度，则子字符串从&lt;始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串，则返回空字符串。<br />toLowerCase() 用法：&lt;字符串对象>.toLowerCase()；返回把原字符串所有大写字母都变成小写的字符串。<br />toUpperCase() 用法：&lt;字符串对象>.toUpperCase()；返回把原字符串所有小写字母都变成大写的字符串。<br /><br />Array 数组对象。数组对象是一个对象的集合，里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”，用来表示它在数组中的位置（既然是“位置”，就也是从零开始的啦）。<br /><br />数组的定义方法：<br /><br />var &lt;数组名> = new Array();<br /><br />这样就定义了一个空数组。以后要添加数组元素，就用：<br /><br />&lt;数组名>[&lt;下标>] = ...;<br /><br />注意这里的方括号不是“可以省略”的意思，数组的下标表示方法就是用方括号括起来。<br /><br />如果想在定义数组的时候直接初始化数据，请用：<br /><br />var &lt;数组名> = new Array(&lt;元素1>, &lt;元素2>, &lt;元素3>...);<br /><br />例如，var myArray = new Array(1, 4.5, 'Hi'); 定义了一个数组 myArray，里边的元素是：myArray[0] == 1; myArray[1] == 4.5; myArray[2] == 'Hi'。<br /><br />但是，如果元素列表中只有一个元素，而这个元素又是一个正整数的话，这将定义一个包含&lt;正整数>个空元素的数组。<br /><br />注意：JavaScript只有一维数组！千万不要用“Array(3,4)”这种愚蠢的方法来定义 4 x 5 的二维数组，或者用“myArray[2,3]”这种方法来返回“二维数组”中的元素。任意“myArray[...,3]”这种形式的调用其实只返回了“myArray[3]”。要使用多维数组，请用这种虚拟法：<br /><br />var myArray = new Array(new Array(), new Array(), new Array(), ...);<br /><br />其实这是一个一维数组，里边的每一个元素又是一个数组。调用这个“二维数组”的元素时：myArray[2][3] = ...;<br /><br />属性<br /><br />length 用法：&lt;数组对象>.length；返回：数组的长度，即数组里有多少个元素。它等于数组里最后一个元素的下标加一。所以，想添加一个元素，只需要：myArray[myArray.length] = ...。<br /><br />方法<br /><br />join() 用法：&lt;数组对象>.join(&lt;分隔符>)；返回一个字符串，该字符串把数组中的各个元素串起来，用&lt;分隔符>置于元素与元素之间。这个方法不影响数组原本的内容。<br />reverse() 用法：&lt;数组对象>.reverse()；使数组中的元素顺序反过来。如果对数组[1, 2, 3]使用这个方法，它将使数组变成：[3, 2, 1]。<br />slice() 用法：&lt;数组对象>.slice(&lt;始>[, &lt;终>])；返回一个数组，该数组是原数组的子集，始于&lt;始>，终于&lt;终>。如果不给出&lt;终>，则子集一直取到原数组的结尾。<br />sort() 用法：&lt;数组对象>.sort([&lt;方法函数>])；使数组中的元素按照一定的顺序排列。如果不指定&lt;方法函数>，则按字母顺序排列。在这种情况下，80 是比 9 排得前的。如果指定&lt;方法函数>，则按&lt;方法函数>所指定的排序方法排序。&lt;方法函数>比较难讲述，这里只将一些有用的&lt;方法函数>介绍给大家。<br /><br />按升序排列数字：<br /><br />function sortMethod(a, b) {<br />    return a - b;<br />}<br /><br />myArray.sort(sortMethod);<br /><br />按降序排列数字：把上面的“a - b”该成“b - a”。<br /><br />有关函数，请看下面。<br /><br />Math “数学”对象，提供对数据的数学计算。下面所提到的属性和方法，不再详细说明“用法”，大家在使用的时候记住用“Math.&lt;名>”这种格式。<br /><br />属性<br /><br />E 返回常数 e (2.718281828...)。<br />LN2 返回 2 的自然对数 (ln 2)。<br />LN10 返回 10 的自然对数 (ln 10)。<br />LOG2E 返回以 2 为低的 e 的对数 (log2e)。<br />LOG10E 返回以 10 为低的 e 的对数 (log10e)。<br />PI 返回π（3.1415926535...)。<br />SQRT1_2 返回 1/2 的平方根。<br />SQRT2 返回 2 的平方根。<br /><br />方法<br /><br />abs(x) 返回 x 的绝对值。<br />acos(x) 返回 x 的反余弦值（余弦值等于 x 的角度），用弧度表示。<br />asin(x) 返回 x 的反正弦值。<br />atan(x) 返回 x 的反正切值。<br />atan2(x, y) 返回复平面内点(x, y)对应的复数的幅角，用弧度表示，其值在 -π 到 π 之间。<br />ceil(x) 返回大于等于 x 的最小整数。<br />cos(x) 返回 x 的余弦。<br />exp(x) 返回 e 的 x 次幂 (ex)。<br />floor(x) 返回小于等于 x 的最大整数。<br />log(x) 返回 x 的自然对数 (ln x)。<br />max(a, b) 返回 a, b 中较大的数。<br />min(a, b) 返回 a, b 中较小的数。<br />pow(n, m) 返回 n 的 m 次幂 (nm)。<br />random() 返回大于 0 小于 1 的一个随机数。<br />round(x) 返回 x 四舍五入后的值。<br />sin(x) 返回 x 的正弦。<br />sqrt(x) 返回 x 的平方根。<br />tan(x) 返回 x 的正切。<br /><br />Date 日期对象。这个对象可以储存任意一个日期，从 0001 年到 9999 年，并且可以精确到毫秒数（1/1000 秒）。在内部，日期对象是一个整数，它是从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果所指日期比 1970 年早，则它是一个负数。所有日期时间，如果不指定时区，都采用“UTC”（世界时）时区，它与“GMT”（格林威治时间）在数值上是一样的。<br /><br />定义一个日期对象：<br /><br />var d = new Date;<br /><br />这个方法使 d 成为日期对象，并且已有初始值：当前时间。如果要自定初始值，可以用：<br /><br />var d = new Date(99, 10, 1);     //99 年 10 月 1 日<br />var d = new Date('Oct 1, 1999'); //99 年 10 月 1 日<br /><br />等等方法。最好的方法就是用下面介绍的“方法”来严格的定义时间。<br /><br />方法<br /><br />以下有很多“g/set[UTC]XXX”这样的方法，它表示既有“getXXX”方法，又有“setXXX”方法。“get”是获得某个数值，而“set”是设定某个数值。如果带有“UTC”字母，则表示获得/设定的数值是基于 UTC 时间的，没有则表示基于本地时间或浏览期默认时间的。<br /><br />如无说明，方法的使用格式为：“&lt;对象>.&lt;方法>”，下同。<br /><br />g/set[UTC]FullYear() 返回/设置年份，用四位数表示。如果使用“x.set[UTC]FullYear(99)”，则年份被设定为 0099 年。<br />g/set[UTC]Year() 返回/设置年份，用两位数表示。设定的时候浏览器自动加上“19”开头，故使用“x.set[UTC]Year(00)”把年份设定为 1900 年。<br />g/set[UTC]Month() 返回/设置月份。<br />g/set[UTC]Date() 返回/设置日期。<br />g/set[UTC]Day() 返回/设置星期，0 表示星期天。<br />g/set[UTC]Hours() 返回/设置小时数，24小时制。<br />g/set[UTC]Minutes() 返回/设置分钟数。<br />g/set[UTC]Seconds() 返回/设置秒钟数。<br />g/set[UTC]Milliseconds() 返回/设置毫秒数。<br />g/setTime() 返回/设置时间，该时间就是日期对象的内部处理方法：从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果要使某日期对象所指的时间推迟 1 小时，就用：“x.setTime(x.getTime() + 60 * 60 * 1000);”（一小时 60 分，一分 60 秒，一秒 1000 毫秒）。<br />getTimezoneOffset() 返回日期对象采用的时区与格林威治时间所差的分钟数。在格林威治东方的市区，该值为负，例如：中国时区（GMT+0800）返回“-480”。<br />toString() 返回一个字符串，描述日期对象所指的日期。这个字符串的格式类似于：“Fri Jul 21 15:43:46 UTC+0800 2000”。<br />toLocaleString() 返回一个字符串，描述日期对象所指的日期，用本地时间表示格式。如：“2000-07-21 15:43:46”。<br />toGMTString() 返回一个字符串，描述日期对象所指的日期，用 GMT 格式。<br />toUTCString() 返回一个字符串，描述日期对象所指的日期，用 UTC 格式。<br />parse() 用法：Date.parse(&lt;日期对象>)；返回该日期对象的内部表达方式。<br /><br />全局对象<br />全局对象从不现形，它可以说是虚拟出来的，目的在于把全局函数“对象化”。在 Microsoft JScript 语言参考中，它叫做“Global 对象”，但是引用它的方法和属性从来不用“Global.xxx”（况且这样做会出错），而直接用“xxx”。<br /><br />属性<br /><br />NaN 一早就说过了。<br /><br />方法<br /><br />eval() 把括号内的字符串当作标准语句或表达式来运行。<br />isFinite() 如果括号内的数字是“有限”的（介于 Number.MIN_VALUE 和 Number.MAX_VALUE 之间）就返回 true；否则返回 false。<br />isNaN() 如果括号内的值是“NaN”则返回 true 否则返回 false。<br />parseInt() 返回把括号内的内容转换成整数之后的值。如果括号内是字符串，则字符串开头的数字部分被转换成整数，如果以字母开头，则返回“NaN”。<br />parseFloat() 返回把括号内的字符串转换成浮点数之后的值，字符串开头的数字部分被转换成浮点数，如果以字母开头，则返回“NaN”。<br />toString() 用法：&lt;对象>.toString()；把对象转换成字符串。如果在括号中指定一个数值，则转换过程中所有数值转换成特定进制。<br />escape() 返回括号中的字符串经过编码后的新字符串。该编码应用于 URL，也就是把空格写成“%20”这种格式。“+”不被编码，如果要“+”也被编码，请用：escape('...', 1)。<br />unescape() 是 escape() 的反过程。解编括号中字符串成为一般字符串。<br /><br />函数<br />函数的定义 <br /><br />所谓“函数”，是有返回值的对象或对象的方法。 <br /><br />函数的种类 <br /><br />常见的函数有：构造函数，如 Array()，能构造一个数组；全局函数，即全局对象里的方法；自定义函数；等等。 <br /><br />自定义函数 <br /><br />定义函数用以下语句： <br /><br />function 函数名([参数集]) {<br />    ...<br />    [return[ &lt;值>];]<br />    ...<br />} <br /><br />其中，用在 function 之后和函数结尾的大括号是不能省去的，就算整个函数只有一句。 <br /><br />函数名与变量名有一样的起名规定，也就是只包含字母数字下划线、字母排头、不能与保留字重复等。 <br /><br />参数集可有可无，但括号就一定要有。 <br /><br />参数 是函数外部向函数内部传递信息的桥梁，例如，想叫一个函数返回 3 的立方，你就要让函数知道“3”这个数值，这时候就要有一个变量来接收数值，这种变量叫做参数。 <br /><br />参数集是一个或多个用逗号分隔开来的参数的集合，如：a, b, c。 <br /><br />函数的内部有一至多行语句，这些语句并不会立即执行，而只当有其它程序调用它时才执行。这些语句中可能包含“return”语句。在执行一个函数的时候，碰到 return 语句，函数立刻停止执行，并返回到调用它的程序中。如果“return”后带有&lt;值>，则退出函数的同时返回该值。 <br /><br />在函数的内部，参数可以直接当作变量来使用，并可以用 var 语句来新建一些变量，但是这些变量都不能被函数外部的过程调用。要使函数内部的信息能被外部调用，要么使用“return”返回值，要么使用全局变量。 <br /><br />全局变量 在 Script 的“根部”（非函数内部）的“var”语句所定义的变量就是全局变量，它能在整个过程的任意地方被调用、更改。 <br /><br />例 <br /><br />function addAll(a, b, c) {<br />    return a + b + c;<br />}<br /><br />var total = addAll(3, 4, 5); <br /><br />这个例子建立了一个叫“addAll”的函数，它有 3 个参数：a, b, c，作用是返回三个数相加的结果。在函数外部，利用“var total = addAll(3, 4, 5);”接收函数的返回值。 <br /><br />更多的时候，函数是没有返回值的，这种函数在一些比较强调严格的语言中是叫做“过程”的，例如 Basic 类语言的“Sub”、Pascal 语言的“procedure”。 <br /><br />属性 <br /><br />arguments 一个数组，反映外部程序调用函数时指定的参数。用法：直接在函数内部调用“arguments”。
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/196755#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 21:39:30 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/196755</link>
        <guid>http://yunmanfan.javaeye.com/blog/196755</guid>
      </item>
      <item>
        <title>JavaScript的学习笔记（1）</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196754" style="color:red;">http://yunmanfan.javaeye.com/blog/196754</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1.JavaScript是什么？</strong><br />JavaScript 是一种“脚本”（“Script”），它直接把代码写到 HTML 文档中，浏览器读取它们的时候才进行编译、执行，所以能查看 HTML 源文件就能查看JavaScript 源代码。JavaScript 没有独立的运行窗口，浏览器当前窗口就是它的运行窗口。<br /><strong>2.Java 与 JavaScript 有什么不同？</strong><br />很多人看到 Java 和 JavaScript 都有“Java”四个字，就以为它们是同一样东西，连我自己当初也是这样。其实它们是完完全全不同的两种东西。Java，全称应该是 Java Applet，是嵌在网页中，而又有自己独立的运行窗口的小程序。Java Applet 是预先编译好的，一个 Applet 文件（.class）用 Notepad 打开阅读，根本不能理解。Java Applet 的功能很强大，可以访问 http、ftp等协议，甚至可以在电脑上种病毒（已有先例了）。相比之下，JavaScript 的能力就比较小了。JavaScript 是一种“脚本”（“Script”），它直接把代码写到 HTML 文档中，浏览器读取它们的时候才进行编译、执行，所以能查看 HTML 源文件就能查看JavaScript 源代码。JavaScript 没有独立的运行窗口，浏览器当前窗口就是它的运行窗口。它们的相同点，我想只有同是以 Java 作编程语言一点了<br /><strong>3。在什么地方插入 JavaScript</strong><br /><br />JavaScript 可以出现在 HTML 的任意地方。使用标记&lt;script>…&lt;/script>，你可以在 HTML 文档的任意地方插入 JavaScript，甚至在&lt;HTML>之前插入也不成问题。不过如果要在声明框架的网页（框架网页）中插入，就一定要在&lt;frameset>之前插入，否则不会运行。<br /><br />基本格式<br /><br />&lt;script><br />&lt;!--<br />...<br />(JavaScript代码)<br />...<br />//--><br />&lt;/script><br /><br />第二行和第四行的作用，是让不懂&lt;script>标记的浏览器忽略 JavaScript 代码。一般可以省略，因为现在想找不懂 Script 的浏览器，恐怕就连博物馆里也没有了。第四行前边的双反斜杠“//”是 JavaScript 里的注释标号，以后将学到。<br /><br />另外一种插入 JavaScript 的方法，是把 JavaScript 代码写到另一个文件当中（此文件通常应该用“.js”作扩展名），然后用格式为“&lt;script src="javascript.js">&lt;/script>”的标记把它嵌入到文档中。注意，一定要用“&lt;/script>”标记。<br /><br />参考 &lt;script>标记还有一个属性：language（缩写lang），说明脚本使用的语言。对于 JavaScript，请用“language="JavaScript"”。<br /><br />参考 相对于&lt;script>标记，还有一个&lt;server>标记。&lt;server>标记所包含的，是服务器端（Server Side）的脚本。本教程只讨论客户器端（Client Side）的 JavaScript，也就是用&lt;script>标记包含的脚本。<br /><br />如果想在浏览器的“地址”栏中执行 JavaScript 语句，用这样的格式：<br /><br />javascript:&lt;JavaScript语句><br /><br />这样的格式也可以用在连接中：<br /><br />&lt;a href="javascript:&lt;JavaScript语句>">...&lt;/a><br /><strong>4.JavaScript 基本语法</strong><br /><br />每一句 JavaScript 都有类似于以下的格式：<br /><br />&lt;语句>;<br /><br />其中分号“;”是 JavaScript 语言作为一个语句结束的标识符。虽然现在很多浏览器都允许用回车充当结束符号，培养用分号作结束的习惯仍然是很好的。<br /><br />语句块 语句块是用大括号“{ }”括起来的一个或 n 个语句。在大括号里边是几个语句，但是在大括号外边，语句块是被当作一个语句的。语句块是可以嵌套的，也就是说，一个语句块里边可以再包含一个或多个语句块。<br /><br /><strong>5.JavaScript 中的变量</strong><br />变量的命名 变量的命名有以下要求：<br /><br />只包含字母、数字和/或下划线；<br />要以字母开头；<br />不能太长（其实有什么人喜欢使用又长又臭的名字呢？）；<br />不能与 JavaScript 保留字（Key Words，Reserved Words，数量繁多，不能一一列出；凡是可以用来做 JavaScript 命令的字都是保留字）重复。 <br /><br />而且，变量是区分大小写的，例如，variable 和 Variable 是两个不同的变量。不仅如此，大部分命令和“对象”（请参阅“对象化编程”章）都是区分大小写的。 <br /><br />提示 给变量命名，最好避免用单个字母“a”“b”“c”等，而改用能清楚表达该变量在程序中的作用的词语。这样，不仅别人能更容易的了解你的程序，而且你在以后要修改程序的时候，也很快会记得该变量的作用。变量名一般用小写，如果是由多个单词组成的，那么第一个单词用小写，其他单词的第一个字母用大写。例如：myVariable 和 myAnotherVariable。这样做仅仅是为了美观和易读，因为 JavaScript 一些命令（以后将用更具体的方法阐述“命令”一词）都是用这种方法命名的：indexOf；charAt 等等。<br /><br />变量需要声明 没有声明的变量不能使用，否则会出错：“未定义”。声明变量可以用：<br /><br />var &lt;变量> [= &lt;值>];<br /><br />var 我们接触的第一个关键字（即保留字）。这个关键字用作声明变量。最简单的声明方法就是“var &lt;变量>;”，这将为&lt;变量>准备内存，给它赋初始值“null”。如果加上“= &lt;值>”，则给&lt;变量>赋予自定的初始值&lt;值>。<br /><br />数据类型 变量可以用的数据类型有：<br /><br />整型 只能储存整数。可以是正整数、0、负整数，可以是十进制、八进制、十六进制。八进制数的表示方法是在数字前加“0”，如“0123”表示八进制数“123”。十六进制则是加“0x”：“0xEF”表示十六进制数“EF”。<br />浮点型 即“实型”，能储存小数。有资料显示，某些平台对浮点型变量的支持不稳定。没有需要就不要用浮点型。<br />字符串型 是用引号“" "”、“' '”包起来的零个至多个字符。用单引号还是双引号由你决定。跟语文一样，用哪个引号开始就用哪个结束，而且单双引号可嵌套使用：'这里是"JavaScript 教程"。' 不过跟语文不同的是，JavaScript 中引号的嵌套只能有一层。如果想再多嵌一些，你需要转义字符：<br />　　转义字符 由于一些字符在屏幕上不能显示，或者 JavaScript 语法上已经有了特殊用途，在要用这些字符时，就要使用“转义字符”。转义字符用斜杠“\”开头：\' 单引号、\" 双引号、\n 换行符、\r 回车（以上只列出常用的转义字符）。于是，使用转义字符，就可以做到引号多重嵌套：'Micro 说："这里是\"JavaScript 教程\"。" '<br />布尔型 常用于判断，只有两个值可选：true（表“真”）和 false（表“假”）。true 和 false 是 JavaScript 的保留字。它们属于“常数”。<br />对象 关于对象，在“对象化编程”一章将详细讲到。<br /><br />由于 JavaScript 对数据类型的要求不严格，一般来说，声明变量的时候不需要声明类型。而且就算声明了类型，在过程中还可以给变量赋予其他类型的值。声明类型可以用赋予初始值的方法做到：<br /><br />var aString = '';<br /><br />这将把 aString 定义为具有空值的字符串型变量。<br /><br />var anInteger = 0;<br /><br />这将把 anInteger 定义为值为 0 的整型。<br /><br />变量的赋值 一个变量声明后，可以在任何时候对其赋值。赋值的语法是：<br /><br />&lt;变量> = &lt;表达式>;<br /><br />其中“=”叫“赋值符”，它的作用是把右边的值赋给左边的变量。下一节将讨论到表达式。 <br /><br />JavaScript常数 有下列几个：<br /><br />null 一个特殊的空值。当变量未定义，或者定义之后没有对其进行任何赋值操作，它的值就是“null”。企图返回一个不存在的对象时也会出现null值。<br />NaN “Not a Number”。出现这个数值比较少见，以至于我们可以不理它。当运算无法返回正确的数值时，就会返回“NaN”值。NaN 值非常特殊，因为它“不是数字”，所以任何数跟它都不相等，甚至 NaN 本身也不等于 NaN 。<br />true 布尔值“真”。用通俗的说法，“对”。<br />false 布尔值“假”。用通俗的说法，“错”。<br /><br />在 Math 对象中还有一系列数学常数。这将在讨论“对象化编程”时谈到。<br /><br /><strong>6.if 语句</strong><br />if ( &lt;条件> ) &lt;语句1> [ else &lt;语句2> ];<br /><br />本语句有点象条件表达式“?:”：当&lt;条件>为真时执行&lt;语句1>，否则，如果 else 部分存在的话，就执行&lt;语句2>。与“?:”不同的是，if 只是一条语句，不会返回数值。&lt;条件>是布尔值，必须用小括号括起来；&lt;语句1>和&lt;语句2>都只能是一个语句，欲使用多条语句，请用语句块。<br /><br />注意 请看下例：<br /><br />if (a == 1)<br />  if (b == 0) alert(a+b);<br />else<br />  alert(a-b);<br /><br />本代码企图用缩进的方法说明 else 是对应 if (a == 1) 的，但是实际上，由于 else 与 if (b == 0) 最相近，本代码不能按作者的想法运行。正确的代码是<br /><br />if (a == 1) {<br />  if (b == 0) alert(a+b);<br />} else {<br />  alert(a-b);<br />}<br /><br />提示 一行代码太长，或者涉及到比较复杂的嵌套，可以考虑用多行文本，如上例，if (a == 1) 后面没有立即写上语句，而是换一行再继续写。浏览器不会混淆的，当它们读完一行，发现是一句未完成语句，它们会继续往下读。使用缩进也是很好的习惯，当一些语句与上面的一两句语句有从属关系时，使用缩进能使程序更易读，方便程序员进行编写或修改工作。<br /><br />循环体<br /><br />for (&lt;变量>=&lt;初始值>; &lt;循环条件>; &lt;变量累加方法>) &lt;语句>;<br /><br />本语句的作用是重复执行&lt;语句>，直到&lt;循环条件>为 false 为止。它是这样运作的：首先给&lt;变量>赋&lt;初始值>，然后*判断&lt;循环条件>（应该是一个关于&lt;变量>的条件表达式）是否成立，如果成立就执行&lt;语句>，然后按&lt;变量累加方法>对&lt;变量>作累加，回到“*”处重复，如果不成立就退出循环。这叫做“for循环”。下面看看例子。<br /><br />for (i = 1; i &lt; 10; i++) document.write(i);<br /><br />本语句先给 i 赋初始值 1，然后执行 document.write(i)语句（作用是在文档中写 i 的值，请参越“对象化编程”一章）；重复时 i++，也就是把 i 加 1；循环直到 i&lt;10 不满足，也就是 i>=10 时结束。结果是在文档中输出了“123456789”。<br /><br />和 if 语句一样，&lt;语句>只能是一行语句，如果想用多条语句，你需要用语句块。<br /><br />与其他语言不同，JavaScript 的 for 循环没有规定循环变量每次循环一定要加一或减一，&lt;变量累加方法>可以是任意的赋值表达式，如 i+=3、i*=2、i-=j 等都成立。<br /><br />提示 适当的使用 for 循环，能使 HTML 文档中大量的有规律重复的部分简化，也就是用 for 循环重复写一些 HTML 代码，达到提高网页下载速度的目的。不过请在 Netscape 中重复进行严格测试，保证通过了才好把网页传上去。作者曾试过多次因为用 for 循环向文档重复写 HTML 代码而导致 Netscape“猝死”。IE 中绝对没有这种事情发生，如果你的网也是只给 IE 看的，用多多的 for 也没问题。<br /><br />除了 for 循环，JavaScript 还提供 while 循环。<br /><br />while (&lt;循环条件>) &lt;语句>;<br /><br />比 for 循环简单，while 循环的作用是当满足&lt;循环条件>时执行&lt;语句>。while 循环的累加性质没有 for 循环强。&lt;语句>也只能是一条语句，但是一般情况下都使用语句块，因为除了要重复执行某些语句之外，还需要一些能变动&lt;循环条件>所涉及的变量的值的语句，否则一但踏入此循环，就会因为条件总是满足而一直困在循环里面，不能出来。这种情况，我们习惯称之为“死循环”。死循环会弄停当时正在运行的代码、正在下载的文档，和占用很大的内存，很可能造成死机，应该尽最大的努力避免。<br /><br />break 和 continue<br /><br />有时候在循环体内，需要立即跳出循环或跳过循环体内其余代码而进行下一次循环。break 和 continue 帮了我们大忙。<br /><br />break;<br /><br />本语句放在循环体内，作用是立即跳出循环。<br /><br />continue;<br /><br />本语句放在循环体内，作用是中止本次循环，并执行下一次循环。如果循环的条件已经不符合，就跳出循环。<br /><br />例<br /><br />for (i = 1; i &lt; 10; i++) {<br />  if (i == 3 || i == 5 || i ==<img src="/images/smiles/icon_cool.gif"/>continue;<br />  document.write(i);<br />}<br /><br />输出：124679。<br /><br />switch 语句<br /><br />如果要把某些数据分类，例如，要把学生的成绩按优、良、中、差分类，我们可能会用 if 语句：<br /><br />if (score >= 0 && score &lt; 60) {<br />  result = 'fail';<br />} else if (score &lt; 80) {<br />  result = 'pass';<br />} else if (score &lt; 90) {<br />  result = 'good';<br />} else if (score &lt;= 100) {<br />  result = 'excellent';<br />} else {<br />  result = 'error';<br />}<br /><br />看起来没有问题，但使用太多的 if 语句的话，程序看起来有点乱。switch 语句就是解决这种问题的最好方法。<br /><br />switch (e) {<br />  case r1: （注意：冒号）<br />    ...<br />    [break;]<br />  case r2:<br />    ...<br />    [break;]<br />  ...<br />  [default:<br />    ...]<br />} <br /><br />这一大段的作用是：计算 e 的值（e 为表达式），然后跟下边“case”后的 r1、r2……比较，当找到一个相等于 e 的值时，就执行该“case”后的语句，直到遇到 break 语句或 switch 段落结束（“}”）。如果没有一个值与 e 匹配，那么就执行“default:”后边的语句，如果没有 default 块，switch 语句结束。<br /><br />上边的 if 段用 switch 改写就是：<br /><br />switch (parseInt(score / 10)) {<br />  case 0:<br />  case 1:<br />  case 2:<br />  case 3:<br />  case 4:<br />  case 5:<br />    result = 'fail';<br />    break;<br />  case 6:<br />  case 7:<br />    result = 'pass';<br />    break;<br />  case 8:<br />    result = 'good';<br />    break;<br />  case 9:<br />    result = 'excellent';<br />    break;<br />  default:<br />    if (score == 100)<br />      result = 'excellent';<br />    else<br />      result = 'error';<br />}<br /><br />其中 parseInt()方法是以后会介绍的，作用是取整。最后 default 段用的 if 语句，是为了不把 100 分当错误论（parseInt(100 / 10) == 10）。
          <br/>
          <span style="color:red;">
            <a href="http://yunmanfan.javaeye.com/blog/196754#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 21:36:17 +0800</pubDate>
        <link>http://yunmanfan.javaeye.com/blog/196754</link>
        <guid>http://yunmanfan.javaeye.com/blog/196754</guid>
      </item>
      <item>
        <title>50个常用HTML中的代码</title>
        <author>yunmanfan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yunmanfan.javaeye.com">yunmanfan</a>&nbsp;
          链接：<a href="http://yunmanfan.javaeye.com/blog/196724" style="color:red;">http://yunmanfan.javaeye.com/blog/196724</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<br />&lt;table border oncontextmenu=return(false)>&lt;td>no&lt;/table> 可用于Table<br /><br /><br /><br />2. &lt;body onselectstart="return false"> 取消选取、防止复制<br /><br /><br /><br />3. onpaste="return false" 不准粘贴<br /><br /><br /><br />4. oncopy="return false;" oncut="return false;" 防止复制<br /><br /><br /><br />5. &lt;link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标<br /><br /><br /><br />6. &lt;link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标<br /><br /><br /><br />7. &lt;input style="ime-mode:disabled"> 关闭输入法<br /><br /><br /><br />8. 永远都会带着框架<br />&lt;script language="JavaScript">&lt;!--<br />if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />// -->&lt;/script><br /><br /><br /><br />9. 防止被人frame<br />&lt;SCRIPT LANGUAGE=JAVASCRIPT>&lt;!-- <br />if (top.location != self.location)top.location=self.location;<br />// -->&lt;/SCRIPT><br /><br /><br /><br />10. 网页将不能被另存为<br />&lt;noscript>&lt;iframe src=*.html>&lt;/iframe>&lt;/noscript> <br /><br /><br /><br />11. &lt;input type=button value=查看网页源代码 <br />onclick="window.location = 'view-source:'+ 'http://www.51js.com/'"><br /><br /><br /><br />12.删除时确认<br />&lt;a href='javascript:if(confirm("确实要删除吗?" target=_blank))location="boos.asp?&areyou=删除&page=1"'>删<br /><br /><br /><br />除&lt;/a> <br /><br /><br /><br />13. 取得控件的绝对位置<br />//Javascript<br />&lt;script language="Javascript"><br />function getIE(e){<br />var t=e.offsetTop;<br />var l=e.offsetLeft;<br />while(e=e.offsetParent){<br />t+=e.offsetTop;<br />l+=e.offsetLeft;<br />}<br />alert("top="+t+"/nleft="+l);<br />}<br />&lt;/script><br /><br /><br /><br />//VBScript<br />&lt;script language="VBScript">&lt;!--<br />function getIE()<br />dim t,l,a,b<br />set a=document.all.img1<br />t=document.all.img1.offsetTop<br />l=document.all.img1.offsetLeft<br />while a.tagName&lt;>"BODY"<br />set a = a.offsetParent<br />t=t+a.offsetTop<br />l=l+a.offsetLeft<br />wend<br />msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"<br />end function<br />-->&lt;/script><br /><br /><br /><br />14. 光标是停在文本框文字的最后<br />&lt;script language="javascript"><br />function cc()<br />{<br />var e = event.srcElement;<br />var r =e.createTextRange();<br />r.moveStart('character',e.value.length);<br />r.collapse(true);<br />r.select();<br />}<br />&lt;/script><br />&lt;input type=text name=text1 value="123" onfocus="cc()"><br /><br /><br /><br />15. 判断上一页的来源<br />javascript:<br />document.referrer<br /><br /><br /><br />16. 最小化、最大化、关闭窗口<br />&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br />&lt;param name="Command" value="Minimize">&lt;/object><br />&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br />&lt;param name="Command" value="Maximize">&lt;/object><br />&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><br />&lt;PARAM NAME="Command" VALUE="Close">&lt;/OBJECT><br /><br /><br /><br />&lt;input type=button value=最小化 onclick=hh1.Click()><br />&lt;input type=button value=最大化 onclick=hh2.Click()><br />&lt;input type=button value=关闭 onclick=hh3.Click()><br />本例适用于IE<br /><br />17.屏蔽功能键Shift,Alt,Ctrl<br />&lt;script><br />function look(){ <br />if(event.shiftKey) <br />alert("禁止按Shift键!"); //可以换成ALT　CTRL<br />} <br />document.onkeydown=look; <br />&lt;/script><br /><br />18. 网页不会被缓存<br />&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"><br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"><br />&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"><br />或者&lt;META HTTP-EQUIV="expires" CONTENT="0"><br /><br />19.怎样让表单没有凹凸感？<br />&lt;input type=text style="border:1 solid #000000"> <br />或<br />&lt;input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: <br /><br />1 solid #000000">&lt;/textarea><br /><br />20.&lt;div>&lt;span>&&lt;layer>的区别？ <br />&lt;div>(division)用来定义大段的页面元素，会产生转行 <br />&lt;span>用来定义同一行内的元素，跟&lt;div>的唯一区别是不产生转行 <br />&lt;layer>是ns的标记，ie不支持，相当于&lt;div><br /><br /><br />21.让弹出窗口总是在最上面:<br />&lt;body onblur="this.focus();"><br /><br />22.不要滚动条? <br />让竖条没有: <br />&lt;body style='overflow:scroll;overflow-y:hidden'> <br />&lt;/body> <br />让横条没有: <br />&lt;body style='overflow:scroll;overflow-x:hidden'> <br />&lt;/body> <br />两个都去掉？更简单了 <br />&lt;body scroll="no"> <br />&lt;/body> <br /><br />23.怎样去掉图片链接点击后，图片周围的虚线？<br />&lt;a href="#" onFocus="this.blur( target=_blank)">&lt;img src="logo.jpg" border=0>&lt;/a><br /><br />24.电子邮件处理提交表单<br />&lt;form name="form1" method="post" action="mailt****@***.com" enctype="text/plain"> <br />&lt;input type=submit><br />&lt;/form><br /><br />25.在打开的子窗口刷新父窗口的代码里如何写？<br />window.opener.location.reload()<br /><br />26.如何设定打开页面的大小<br />&lt;body onload="top.resizeTo(300,200);"><br />打开页面的位置&lt;body onload="top.moveBy(300,200);"><br /><br />27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动 <br />&lt;STYLE> <br />body <br />{background-image:url(logo.gif); background-repeat:no-repeat; <br /><br />background-position:center;background-attachment: fixed} <br />&lt;/STYLE> <br /><br />28. 检查一段字符串是否全由数字组成<br />&lt;script language="Javascript">&lt;!--<br />function checkNum(str){return str.match(//D/)==null}<br />alert(checkNum("1232142141"))<br />alert(checkNum("123214214a1"))<br />// -->&lt;/script><br /><br />29. 获得一个窗口的大小<br />document.body.clientWidth; document.body.clientHeight<br /><br />30. 怎么判断是否是字符<br />if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br />else alert("全是字符");<br /><br />31.TEXTAREA自适应文字行数的多少<br />&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"><br />&lt;/textarea><br /><br />32. 日期减去天数等于第二个日期<br />&lt;script language=Javascript><br />function cc(dd,dadd)<br />{<br />//可以加上错误处理<br />var a = new Date(dd)<br />a = a.valueOf()<br />a = a - dadd * 24 * 60 * 60 * 1000<br />a = new Date(a)<br />alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")<br />}<br />cc("12/23/2002",2)<br />&lt;/script><br /><br />33. 选择了哪一个Radio<br />&lt;HTML>&lt;script language="vbscript"><br />function checkme()<br />for each ob in radio1<br />if ob.checked then window.alert ob.value<br />next<br />end function<br />&lt;/script>&lt;BODY><br />&lt;INPUT name="radio1" type="radio" value="style" checked>Style<br />&lt;INPUT name="radio1" type="radio" value="barcode">Barcode<br />&lt;INPUT type="button" value="check" onclick="checkme()"><br />&lt;/BODY>&lt;/HTML><br /><br />34.脚本永不出错<br />&lt;SCRIPT LANGUAGE="JavaScript"> <br />&lt;!-- Hide <br />function killErrors() { <br />return true; <br />} <br />window.onerror = killErrors; <br />// --> <br />&lt;/SCRIPT><br /><br />35.ENTER键可以让光标移到下一个输入框<br />&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"><br /><br />36. 检测某个网站的链接速度：<br />把如下代码加入&lt;body>区域中:<br />&lt;script language=Javascript><br />tim=1<br />setInterval("tim++",100)<br />b=1<br /><br />var autourl=new Array()<br />autourl[1]="www.njcatv.net"<br />autourl[2]="javacool.3322.net"<br />autourl[3]="www.sina.com.cn"<br />autourl[4]="www.nuaa.edu.cn"<br />autourl[5]="www.cctv.com"<br /><br />function butt(){<br />document.write("&lt;form name=autof>")<br />for(var i=1;i&lt;autourl.length;i++)<br />document.write("&lt;input type=text name=txt"+i+" size=10 value=测试中……> =》&lt;input type=text <br /><br />name=url"+i+" size=40> =》&lt;input type=button value=GO <br /><br />onclick=window.open(this.form.url"+i+".value)>&lt;br>")<br />document.write("&lt;input type=submit value=刷新>&lt;/form>")<br />}<br />butt()<br />function auto(url){<br />document.forms[0]["url"+b].value=url<br />if(tim>200)<br />{document.forms[0]["txt"+b].value="链接超时"}<br />else<br />{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}<br />b++<br />}<br />function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img <br /><br />src=http://"+autourl+"/"+Math.random()+" width=1 height=1 <br /><br />onerror=auto('http://"+autourl+"')>")}<br />run()&lt;/script><br /><br />37. 各种样式的光标<br />auto ：标准光标<br />default ：标准箭头<br />hand ：手形光标<br />wait ：等待光标<br />text ：I形光标<br />vertical-text ：水平I形光标<br />no-drop ：不可拖动光标<br />not-allowed ：无效光标<br />help ：?帮助光标<br />all-scroll ：三角方向标<br />move ：移动标<br />crosshair ：十字标<br />e-resize<br />n-resize<br />nw-resize<br />w-resize<br />s-resize<br />se-resize<br />sw-resize<br /><br />38.页面进入和退出的特效<br />进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"><br />推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">  <br />这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使<br /><br />用哪种特效，取值为1-23:<br />　　0 矩形缩小 <br />　　1 矩形扩大 <br />　　2 圆形缩小<br />　　3 圆形扩大 <br />　　4 下到上刷新 <br />　　5 上到下刷新<br />　　6 左到右刷新 <br />　　7 右到左刷新 <br />　　8 竖百叶窗<br />　　9 横百叶窗 <br />　　10 错位横百叶窗 <br />　　11 错位竖百叶窗<br />　　12 点扩散 <br />　　13 左右到中间刷新 <br />　　14 中间到左右刷新<br />　　15 中间到上下<br />　　16 上下到中间 <br />　　17 右下到左上<br />　　18 右上到左下 <br />　　19 左上到右下 <br />　　20 左下到右上<br />　　21 横条 <br />　　22 竖条 <br />　　23 以上22种随机选择一种<br /><br />39.在规定时间内跳转<br />&lt;META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"> <br /><br />40.网页是否被检索<br />&lt;meta name="ROBOTS" content="属性值"><br />　　其中属性值有以下一些:<br />　　属性值为"all": 文件将被检索，且页上链接可被查询；<br />　　属性值为"none": 文件不被检索，而且不查询页上的链接；<br />　　属性值为"index": 文件将被检索；<br />　　属性值为"follow": 查询页上的链接；<br />　　属性值为"noindex": 文件不检索，但可被查询链接；<br />　　属性值为"nofollow": 文件不被检索，但可查询页上的链接。 <br />HTML标记参考手册<br /><br />总类（所有HTML文件都有的） <br /><br />文件类型 &lt;HTML>&lt;/HTML> （放在档案的开头与结尾） <br />文件主题 &lt;TITLE>&lt;/TITLE> （必须放在「文头」区块内） <br />文头 &lt;HEAD>&lt;/HEAD> （描述性资料，像是「主题」） <br />文体 &lt;BODY>&lt;/BODY> （文件本体） <br /><br />结构性定义（由浏览器控制的显示风格） <br /><br />标题 &lt;H?>&lt;/H?> （从1到6，有六层选择） <br />3.0 标题的对齐 &lt;H? ALIGN=LEFT|CENTER|RIGHT>&lt;/H?> <br />3.0 区分 &lt;DIV>&lt;/DIV> <br />3.0 区分的对齐 &lt;DIV ALIGN=LEFT|RIGHT|CENTER|JUSTIFY>&lt;/DIV> <br />引文区块 &lt;BLOCKQUOTE>&lt;/BLOCKQUOTE> （通常会内缩） <br />强调 &lt;EM>&lt;/EM> （通常会以斜体显示） <br />特别强调 &lt;STRONG>&lt;/STRONG> （通常会以加粗显示） <br />引文 &lt;CITE>&lt;/CITE> （通常会以斜体显示） <br />码 &lt;CODE>&lt;/CODE> （显示原始码之用） <br />样本 &lt;SAMP>&lt;/SAMP> <br />键盘输入 &lt;KBD>&lt;/KBD> <br />变数 &lt;VAR>&lt;/VAR> <br />定义 &lt;DFN>&lt;/DFN> （有些浏览器不提供） <br />地址 &lt;ADDRESS>&lt;/ADDRESS> <br />3.0 大字 &lt;BIG>&lt;/BIG> <br />3.0 小字 &lt;SMALL>&lt;/SMALL> <br /><br />与外观相关的标签（作者自订的表现方式） <br /><br />加粗 &lt;B>&lt;/B> <br />斜体 &lt;I>&lt;/I> <br />3.0 底线 &lt;U>&lt;/U> （尚有些浏览器不提供） <br />3.0 删除线 &lt;S>&lt;/S> （尚有些浏览器不提供） <br />3.0 下标 &lt;SUB>&lt;/SUB> <br />3.0 上标 &lt;SUP>&lt;/SUP> <br />打字机体 &lt;TT>&lt;/TT> （用单空格字型显示） <br />预定格式 &lt;PRE>&lt;/PRE> （保留文件中空格的大小） <br />预定格式的宽度 &lt;PRE WIDTH=?>&lt;/PRE>（以字元计算） <br />N1.0+ 向中看齐 &lt;CENTER>&lt;/CENTER> （文字与图片都可以） <br />N1.0 闪耀 &lt;BLINK>&lt;/BLINK> （有史以来最被嘲弄的标签） <br />N1.0 字体大小 &lt;FONT SIZE=?>&lt;/FONT>（从1到7） <br />N1.0 改变字体大小 &lt;FONT SIZE=+|-?>&lt;/FONT> <br />N1.0 基本字体大小 &lt;BASEFONT SIZE=?> （从1到7; 内定为3） <br />N2.0 字体颜色 &lt;FONT COLOR="#$$$$$$">&lt;/FONT> <br /><br /><br />连结与图形 <br /><br />链接 &lt;A HREF="URL">&lt;/A> <br />链接到锚点 &lt;A HREF="URL#***">&lt;/A>（如果锚点在另一个档案） <br />&lt;A HREF="#***">&lt;/A> （如果锚点目前的档案） <br />N2.0 链接到目的视框 &lt;A HREF="URL" TARGET="***">&lt;/A> <br />设定锚点 &lt;A NAME="***">&lt;/A> <br />图形 &lt;IMG SRC="URL"> <br />图形看齐方式 &lt;IMG SRC="URL" ALIGN=TOP|BOTTOM|MIDDLE> <br />N1.0 图形看齐方式 &lt;IMG SRC="URL" <br />ALIGN=LEFT|RIGHT|TEXTTOP|ABSMIDDLE|BASELINE|ABSBOTTOM> <br />取代文字 &lt;IMG SRC="URL" ALT="***"> （如果没有办法显示图形则显示此文字） <br />点选图 &lt;IMG SRC="URL" ISMAP> （需要CGI程式） <br />N2.0 点选图 &lt;IMG SRC="URL" USEMAP="URL"> <br />N2.0 地图 &lt;MAP NAME="***">&lt;/MAP>（描述地图） <br />N2.0 段落 &lt;AREA SHAPE="RECT" COORDS=",,," HREF="URL"|NOHREF> <br />3.0 大小 &lt;IMG SRC="URL" WIDTH="?" HEIGHT="?">（以pixels为单位） <br />N1.0 图形边缘 &lt;IMG SRC="URL" BORDER=?> （以pixels为单位） <br />N1.0 图形边缘空间 &lt;IMG SRC="URL" HSPACE=? VSPACE=?> （以pixels为单位） <br />N1.0 低解析度图形 &lt;IMG SRC="URL" LOWSRC="URL"> <br />N1.1 用户端拉 &lt;META HTTP-EQUIV="Refresh" CONTENT="?; URL=URL">（使用端自动更新 ） <br />N2.0 内嵌物件 &lt;EMBED SRC="URL"> （将物件插入页面） <br />N2.0 内嵌物件大小 &lt;EMBED SRC="URL" WIDTH="?" HEIGHT="?"> <br /><br /><br />分隔 <br /><br />段落 &lt;P> （通常是两个return） <br />3.0 段落 &lt;P>&lt;/P> （新定义成容器型标签） <br />3.0 文字看齐方式 &lt;P ALIGN=LEFT|CENTER|RIGHT>&lt;/P> <br />换行 &lt;BR> （一个return） <br />N1.0 文字部份看齐方式&lt;BR CLEAR=LEFT|RIGHT|ALL>（与图形合用时） <br />横线 &lt;HR> <br />N1.0 横线对齐 &lt;HR ALIGN=LEFT|RIGHT|CENTER> <br />N1.0 横线厚度 &lt;HR SIZE=?> （以pixels为单位） <br />N1.0 横线宽度 &lt;HR WIDTH=?> （以pixels为单位） <br />N1.0 横线比率宽度 &lt;HR WIDTH=%> （以页宽为100%） <br />N1.0 实线 &lt;HR NOSHADE> （没有立体效果） <br />N1.0 不可换行 &lt;NOBR>&lt;/NOBR> （不换行） <br />N1.0 可换行处 &lt;WBR> （如果需要，可在此断行） <br /><br /><br />列举 （可以巢状列举） <br /><br />无次序式列举 &lt;UL>&lt;LI>&lt;/UL> （&lt;LI> 放在每一项前） <br />N1.0 公布式列举 &lt;UL TYPE=DISC|CIRCLE|SQUARE>（定义全部的列举项） <br />&lt;LI TYPE=DISC|CIRCLE|SQUARE>（定义这个及其後的列举项） <br />有次序式列举 &lt;OL>&lt;LI>&lt;/OL> （&lt;LI> 放在每一项前） <br />N1.0 数标型态 &lt;OL TYPE=A|a|I|i|1> （定义全部的列举项） <br />&lt;LI TYPE=A|a|I|i|1> （定义这个及其後的列举项） <br />N1.0 起始数字 &lt;OL VALUE=?> （定义全部的列举项） <br />&lt;LI VALUE=?> （定义这个及其後的列举项） <br />定义式列举 &lt;DL>&lt;DT>&lt;DD>&lt;/DL>（&lt;DT>项目, &lt;DD>