﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-table-文章分类-html and js</title><link>http://www.blogjava.net/table/category/35161.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 23 Jan 2010 13:11:16 GMT</lastBuildDate><pubDate>Sat, 23 Jan 2010 13:11:16 GMT</pubDate><ttl>60</ttl><item><title>对比 javascript url编码 escape(), encodeURL(), encodeURIComponent() 区别</title><link>http://www.blogjava.net/table/articles/308921.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Sun, 10 Jan 2010 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/308921.html</guid><wfw:comment>http://www.blogjava.net/table/comments/308921.html</wfw:comment><comments>http://www.blogjava.net/table/articles/308921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/308921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/308921.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">javascript 常用的编码格式有：escape(), encodeURL(), encodeURIComponent() 区别如下：<br />
</span><br />
<h3><font face="Tahoma,Helvetica,Sans-Serif">escape() 方法： </font></h3>
<div><font face="Tahoma,Helvetica,Sans-Serif">采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码（xx等于该字符在字符集表里面的编码的16进制数字）。比如，空格符对应的编码是%20。</font></div>
<div><font face="Tahoma,Helvetica,Sans-Serif">不会被此方法编码的字符： @ * / +</font></div>
<h3><br />
<font face="Tahoma,Helvetica,Sans-Serif">encodeURI() 方法：</font></h3>
<div><font face="Tahoma,Helvetica,Sans-Serif">把URI字符串采用UTF-8编码格式转化成escape格式的字符串。</font></div>
<div><font face="Tahoma,Helvetica,Sans-Serif">不会被此方法编码的字符：! @ # $&amp; * ( ) = : / ; ? + '<br />
</font></div>
<h3><font face="Tahoma,Helvetica,Sans-Serif">encodeURIComponent() 方法：</font></h3>
<div><font face="Tahoma,Helvetica,Sans-Serif">把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比，这个方法将对更多的字符进行编码，比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话，不能用这个方法来进行编码，否则 / 字符被编码之后URL将显示错误。</font></div>
<div><font face="Tahoma,Helvetica,Sans-Serif">不会被此方法编码的字符：! * ( ) '</font></div>
<div><font face="Tahoma,Helvetica,Sans-Serif">因此，对于中文字符串来说，如果不希望把字符串编码格式转化成UTF-8格式的（比如原页面和目标页面的charset是一致的时候），只需要使用escape。如果你的页面是GB2312或者其他的编码，而接受参数的页面是UTF-8编码的，就要采用encodeURI或者encodeURIComponent。</font></div>
<div><font face="Tahoma,Helvetica,Sans-Serif">另外，encodeURI/encodeURIComponent是在javascript1.5之后引进的，escape则在javascript1.0版本就有。</font></div>
<img src ="http://www.blogjava.net/table/aggbug/308921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2010-01-10 16:07 <a href="http://www.blogjava.net/table/articles/308921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript关闭窗口（兼容firefox，IE）</title><link>http://www.blogjava.net/table/articles/267344.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Fri, 24 Apr 2009 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/267344.html</guid><wfw:comment>http://www.blogjava.net/table/comments/267344.html</wfw:comment><comments>http://www.blogjava.net/table/articles/267344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/267344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/267344.html</trackback:ping><description><![CDATA[<p><strong>方法一：</strong></p>
<div class="code_title"><span class="hilite1">js</span> 代码</div>
<div align="left">
<div class="dp-highlighter" style="width: 98.67%; height: 163px">
<div class="bar" align="left"></div>
<div align="left">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;CloseWin()&nbsp;</span><span class="comment">//这个不会提示是否关闭浏览器 </span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>{ &nbsp;&nbsp;</span>
    <li class="alt"><span>window.opener=</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span class="comment">//window.opener=top; </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>window.open(</span><span class="string">""</span><span>,</span><span class="string">"_self"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>window.close(); &nbsp;&nbsp;</span>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
</div>
<div><strong><font color="#000000">方法二：</font></strong></div>
<div align="left">
<blockquote dir="ltr" style="margin-right: 0px">
<div dir="ltr"><strong><font face="宋体">open.html</font></strong></div>
<div class="code_title" dir="ltr"><span class="hilite1">js</span> 代码</div>
<div dir="ltr" align="left">
<div class="dp-highlighter">
<div class="bar" align="left"></div>
<div align="left">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;open_complex_self()&nbsp;{ &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;obj_window&nbsp;=&nbsp;window.open('close.html',&nbsp;'_self'); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;obj_window.opener&nbsp;=&nbsp;window; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;obj_window.focus(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
</div>
<div dir="ltr"></div>
<div dir="ltr"><font face="宋体"><strong>close.html</strong></font></div>
<div dir="ltr">
<div class="code_title">
<div class="code_title"><span class="hilite1">js</span> 代码</div>
<font color="#000000"><strong>
<div class="code_title" align="left">
<div class="dp-highlighter">
<div align="left">
<ol class="dp-c">
    <li class="alt"><span><span>window.close();&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
</div>
</div>
<div class="code_title">另附：</div>
</strong></font></div>
</div>
</blockquote>
<blockquote dir="ltr" style="margin-right: 0px">
<div dir="ltr"><font color="#000000">//普通带提示关闭</font></div>
<div dir="ltr"><font face="宋体" color="#0000ff">function closeie(){ window.close(); }</font></div>
<div dir="ltr"><font face="宋体">//关闭IE6不提示 <font color="#0000ff">function closeie6(){ window.opener=null; window.close(); }</font></font></div>
<div dir="ltr"><font face="宋体">//关闭IE7不提示 <font color="#0000ff">function closeie7(){ window.open('','_top'); window.top.close(); }</font></font></div>
</blockquote><span><br />
<br />
<p><font style="background-color: #cce8cf">javascript关闭窗口，可以用下面简单的代码：</font></p>
<p><font style="background-color: #cce8cf">&lt;a href="javascript:self.close()"&gt;关闭窗口&lt;/a&gt;</font></p>
<p><font style="background-color: #cce8cf">我在IE7下测试通过，但是firefox3.0却不行。<br />
难道firefox不支持在href中直接写JavaScript？于是改成下面的样子：</font></p>
<p><font style="background-color: #cce8cf">&lt;a href="javascript:alert('Hello World')"&gt;弹出窗口&lt;/a&gt;</font></p>
<p><font style="background-color: #cce8cf">这次IE7和firefox下测试都通过。那就不是href中直接写JavaScript的原因了。<br />
继续测试firefox怎么关闭自身窗口</font></p>
<p><font style="background-color: #cce8cf">改成了如下代码</font></p>
<p><font style="background-color: #cce8cf">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <br />
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;script type="text/javascript"&gt;<br />
&lt;!--<br />
&nbsp;&nbsp;&nbsp; function windowClose(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //self.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
//--&gt;<br />
&lt;/script&gt;<br />
&lt;title&gt;js测试&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;a href="javascript:self.close()"&gt;关闭窗口&lt;/a&gt;&lt;br /&gt;<br />
&lt;a href="javascript:alert('Hello World')"&gt;弹出窗口&lt;/a&gt;&lt;br /&gt; <br />
&lt;a href="#" onclick="windowClose()"&gt;js函数关闭窗口&lt;/a&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</font></p>
<font style="background-color: #cce8cf">
<p><br />
还是不能关闭窗口。难道firefox不支持window的close属性？<br />
那window对象的close方法能不能关闭open方法打开的窗口呢？</p>
<p>写下面两个html文件放在同一个文件夹下</p>
<p>1.open.html</p>
<p>&lt;script type="text/javascript"&gt;<br />
&lt;!--<br />
&nbsp;&nbsp;&nbsp; function openWindow(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.open("new.html","newWindow","width=200,height=100,toolbar=no");<br />
&nbsp;&nbsp;&nbsp; }<br />
//--&gt;<br />
&lt;/script&gt;<br />
&lt;a href="#" onclick="openWindow()"&gt;open函数打开新窗口&lt;/a&gt;&lt;br /&gt;<br />
&lt;a href="new.html" target="_blank"&gt;超级链接在新窗口中打开新页面&lt;/a&gt;&lt;br /&gt;<br />
&lt;a href="new.html" target="_parent"&gt;超级链接在父窗口中打开新页面&lt;/a&gt;</p>
<p>2.new.html</p>
<p>&lt;a href="javascript:window.close()"&gt;关闭窗口&lt;/a&gt;<br />
&lt;a href="javascript:self.close()"&gt;关闭窗口&lt;/a&gt;</p>
<p>用open方法和在"_blank"打开的可以在新窗口中关闭，而在"_parent"中打开的在firefox中还是关闭不</p>
<p>了</p>
<p>因此在firefox里用window的close方法时要注意他和IE不同的地方：在父窗口打开的页面是不能用close</p>
<p>方法关闭的。</p>
<p>然后去google搜了一下：之所以window.close在firefox不能使用，是因为firefox默认不能关闭用户打</p>
<p>开的网页，我们可以这样设置firefox：</p>
<p>打开firefox,在地址栏输入about:config</p>
<p>找到dom.allow_scripts_to_close_windows这项并改为true。</p>
<p>现在知道为什么了吧。那篇文章还有一段不错的内容，摘录如下：</p>
<p>众所周知,在javascript中window.close()是用来关闭窗口的，而且ie和firefox都是支持的。为了实现</p>
<p>用户对浏览器的绝对控制，ie中用close关闭非open打开的窗口时会弹出一个对话框询问用户。有时候我</p>
<p>们不希望再这样哆嗦，但是怎么去掉这个框呢，用下面的代码就可以了</p>
<p>&lt;script&nbsp;&nbsp; language="javascript"&nbsp;&nbsp; type="text/javascript"&gt;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; function&nbsp;&nbsp; closeWindow()&nbsp;&nbsp; {&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; window.open('','_parent','');&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; window.close();&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; }&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; &lt;/script&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;a&nbsp;&nbsp; href="javascript:closeWindow();"&gt;Close&nbsp;&nbsp; Window&lt;/a&gt;</p>
<p><br />
参考文章：1.http://hi.baidu.com/suen_%CB%EF/blog/item/bedca57f8932480d28388a49.html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.http://blog.csdn.net/a9529lty/archive/2008/11/22/3351539.aspx</p>
<p><br />
文章出处：DIY部落(http://www.diybl.com/course/1_web/javascript/jsjs/20090318/162531.html)</font></p>
</span></div>
<img src ="http://www.blogjava.net/table/aggbug/267344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-04-24 13:35 <a href="http://www.blogjava.net/table/articles/267344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http协议状态码的含义及解决方法</title><link>http://www.blogjava.net/table/articles/256303.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 23 Feb 2009 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/256303.html</guid><wfw:comment>http://www.blogjava.net/table/comments/256303.html</wfw:comment><comments>http://www.blogjava.net/table/articles/256303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/256303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/256303.html</trackback:ping><description><![CDATA[<p>当用户在防问Internet信息服务（IIS）的服务器上的内容时时，IIS服务器响应请求，会自动返回一个表示该请求的状态的数字代码,提供关于相关请求的状态信息。同样当搜索引擎蜘蛛在抓取的过程中，服务器也会相关的http状态码，通过了解http状态代码, 可以更详细的分析日志中的访问情况。</p>
<div class="cite">
<p>100 - 表示已收到请求的一部分，正在继续发送余下部分。</p>
<p>101 - 切换协议。</p>
<p>2xx - 成功　服务器成功地接受了客户端请求。</p>
<p>200 - 确定。客户端请求已成功。</p>
<p>201 - 已创建。</p>
<p>202 - 已接受。</p>
<p>203 - 非权威性信息。</p>
<p>204 - 无内容。</p>
<p>205 - 重置内容。</p>
<p>206 - 部分内容。</p>
<p>300 - 针对收到请求，服务器可执行多种操作。</p>
<p>301 - 永久移动转移，请求的内容已永久移动其他新位置。</p>
<p>302 - 临时移动转移，请求的内容已临时移动新的位置</p>
<p>304 - 未修改。自从上次请求后，请求的内容未修改过。</p>
<p>307 - 临时重定向。服务器目前从不同位置响应请求，但请求者应继续使用原有位置来进行以后的请求。</p>
<p>400 - 错误的请求。</p>
<p>401 - 访问被拒绝。IIS 定义了许多不同的 401 错误，它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示，但不在 IIS 日志中显示：</p>
<p>401.1 - 登录失败。</p>
<p>401.2 - 服务器配置导致登录失败。</p>
<p>401.3 - 由于 ACL 对资源的限制而未获得授权。</p>
<p>401.4 - 筛选器授权失败。</p>
<p>401.5 - ISAPI/CGI 应用程序授权失败。</p>
<p>401.7 - 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。</p>
<p>403 - 禁止访问：IIS 定义了许多不同的 403 错误，它们指明更为具体的错误原因：</p>
<p>403.1 - 执行访问被禁止。</p>
<p>403.2 - 读访问被禁止。</p>
<p>403.3 - 写访问被禁止。</p>
<p>403.4 - 要求 SSL.</p>
<p>403.5 - 要求 SSL 128.</p>
<p>403.6 - IP 地址被拒绝。</p>
<p>403.7 - 要求客户端证书。</p>
<p>403.8 - 站点访问被拒绝。</p>
<p>403.9 - 用户数过多。</p>
<p>403.10 - 配置无效。</p>
<p>403.11 - 密码更改。</p>
<p>403.12 - 拒绝访问映射表。</p>
<p>403.13 - 客户端证书被吊销。</p>
<p>403.14 - 拒绝目录列表。</p>
<p>403.15 - 超出客户端访问许可。</p>
<p>403.16 - 客户端证书不受信任或无效。</p>
<p>403.17 - 客户端证书已过期或尚未生效。</p>
<p>403.18 - 在当前的应用程序池中不能执行所请求的 URL.这个错误代码为 IIS 6.0 所专用。</p>
<p>403.19 - 不能为这个应用程序池中的客户端执行 CGI.这个错误代码为 IIS 6.0 所专用。</p>
<p>403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。</p>
<p>404 - 未找到请求的内容。</p>
<p>404.0 - 未找到文件或目录。</p>
<p>404.1 - 无法在所请求的端口上访问 Web站点。</p>
<p>404.2 - Web 服务扩展锁定策略阻止本请求。</p>
<p>404.3 - MIME 映射策略阻止本请求。</p>
<p>405 - 用来访问本页面的 HTTP 谓词不被允许（方法不被允许）</p>
<p>406 - 客户端浏览器不接受所请求页面的 MIME 类型。</p>
<p>407 - 要求进行代理身份验证。</p>
<p>412 - 前提条件失败。</p>
<p>413 - 请求实体太大。</p>
<p>414 - 请求 URI 太长。</p>
<p>415 - 不支持的媒体类型。</p>
<p>416 - 所请求的范围无法满足。</p>
<p>417 - 执行失败。</p>
<p>423 - 锁定的错误。</p>
<p>500 - 服务器内部错误。</p>
<p>500.12 - 应用程序正忙于在 Web 服务器上重新启动。</p>
<p>500.13 - Web 服务器太忙。</p>
<p>500.15 - 不允许直接请求 Global.asa.</p>
<p>500.16 - UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。</p>
<p>500.18 - URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。</p>
<p>500.100 - 内部 ASP 错误。</p>
<p>501 - 服务器无法完成请求的功能。</p>
<p>502 - 服务器用作网关或代理服务器时收到了无效响应。</p>
<p>502.1 - CGI 应用程序超时。</p>
<p>502.2 - CGI 应用程序出错。</p>
<p>503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。</p>
<p>504 - 网关超时。</p>
<p>505 - HTTP 版本不受支持。</p>
</div>
<div class="cite">
<p><strong>英文版：<br />
</strong>100：Continue<br />
101：Switching Protocols<br />
102：Processing<br />
200：OK<br />
201：Created<br />
202：Accepted<br />
203：Non-Authoriative Information<br />
204：No Content<br />
205：Reset Content<br />
206：Partial Content<br />
207：Multi-Status<br />
300：Multiple Choices<br />
301：Moved Permanently<br />
302：Found<br />
303：See Other<br />
304：Not Modified<br />
305：Use Proxy<br />
306：(Unused)<br />
307：Temporary Redirect<br />
400：Bad Request<br />
401：Unauthorized<br />
402：Payment Granted<br />
403：Forbidden<br />
404：File Not Found<br />
405：Method Not Allowed<br />
406：Not Acceptable<br />
407：Proxy Authentication Required<br />
408：Request Time-out<br />
409：Conflict<br />
410：Gone<br />
411：Length Required<br />
412：Precondition Failed<br />
413：Request Entity Too Large<br />
414：Request-URI Too Large<br />
415：Unsupported Media Type<br />
416：Requested range not satisfiable<br />
417：Expectation Failed<br />
422：Unprocessable Entity<br />
423：Locked<br />
424：Failed Dependency<br />
500：Internal Server Error<br />
501：Not Implemented<br />
502：Bad Gateway<br />
503：Service Unavailable<br />
504：Gateway Timeout<br />
505：HTTP Version Not Supported<br />
507：Insufficient Storage</p>
</div>
<div class="cite">
<p><strong>常见的 HTTP 状态代码及其原因</strong></p>
<p>200 - 成功。&nbsp; IIS 已成功处理发送的请求。</p>
<p>304 - 未修改。 客户端请求的内容已在其缓存中，内容自缓存以来尚未被修改过。客户端使用内容的缓存副本，而不从服务器下载内容。</p>
<p>401.1 - 登录失败。 登录不成功，可能因为用户名或密码访问无效。</p>
<p>401.3 - 服务列表对资源的限制而未获得授权。 表示存在NTFS权限问题。或者对试图访问的文件具备相应的权限，也可能发生此错误。</p>
<p>403.1 - 执行访问被禁止。</p>
<p>下面是导致此错误信息的两个常见原因：</p>
<p>您没有足够的执行许可。例如，如果试图访问的 ASP 页所在的目录权限设为&#8220;无&#8221;，或者，试图执行的 CGI 脚本所在的目录权限为&#8220;只允许脚本&#8221;，将出现此错误信息。若要修改执行权限，请在 Microsoft 管理控制台 （MMC）中右击目录，然后依次单击属性和目录选项卡，确保为试图访问的内容设置适当的执行权限。</p>
<p>您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词（例如，GET 或 POST）。若要验证这一点，请在 MMC 中右击目录，依次单击属性、目录选项卡和配置，然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。</p>
<p>403.2 - 读访问被禁止。验证是否已将IIS设置为允许对目录进行读访问。另外，如果您正在使用默认文件，请验证该文件是否存在。</p>
<p>403.3 - 写访问被禁止。 验证IIS权限和NTFS限是否已设置以便向该目录授予写访问权。</p>
<p>403.4 - 要求 SSL.禁用要求安全通道选项，或使用 HTTPS 代替 HTTP 来访问该页面。</p>
<p>403.5 - 要求 SSL 128.禁用要求 128 位加密选项，或使用支持 128 位加密的浏览器以查看该页面。</p>
<p>403.6 - IP地址被拒绝。服务器配置拒绝访问您目前的IP地址。</p>
<p>403.7 - 要求客户端证书。您已把您的服务器配置为要求客户端身份验证证书，但您未安装有效的客户端证书。</p>
<p>403.8 - 站点访问被拒绝。您已为您用来访问服务器的域设置了域名限制。</p>
<p>403.9 - 用户数过多。与该服务器连接的用户数量超过了IIS设置的连接数。</p>
<p>403.12 - 拒绝访问映射表。 您要访问的页面要求提供客户端证书，但映射到您的客户端证书的用户 ID 已被拒绝访问该文件。</p>
<p>404 - 未找到。 发生此错误的原因是您试图访问的文件已被移走或删除。</p>
<p>500 - 内部服务器错误。 造成500错误常见原因有：ASP语法出错、ACCESS数据库连接语句出错、文件引用与包含路径出错、使用了服务器不支持的组件如FSO等</p>
<p>500.12 - 服务器错误:Web 服务器上的应用程序正在重新启动。 这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后，此信息即会消失。如果刷新页面后，此信息再次出现，可能是防病毒软件正在扫描 Global.asa 文件。</p>
<p>500-100.ASP - ASP 错误。 如果试图加载的 ASP 页中含有错误代码，将出现此错误信息。若要获得更确切的错误信息，请禁用友好 HTTP 错误信息。默认情况下，只会在默认 Web 站点上启用此错误信息。</p>
<p>502 - 网关错误。 如果试图运行的 CGI 脚本不返回有效的 HTTP 标头集，将出现此错误信息。</p>
</div>
<div class="cite">
<p>1、错误号401.1 - 未经授权：访问由于凭据无效被拒绝。由于用户匿名访问使用的账号（默认是IUSR_机器名）被禁用，或者没有权限访问计算机，将造成用户无法访问。</p>
<p>解决方案：</p>
<p>（1）查看IIS管理器中站点安全设置的匿名帐户是否被禁用，如果是，请尝试用以下办法启用：</p>
<p>控制面板-&gt;管理工具-&gt;计算机管理-&gt;本地用户和组，将IUSR_机器名账号启用。如果还没有解决，请继续下一步。</p>
<p>（2）查看本地安全策略中，IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限，如果没有尝试用以下步骤赋予权限：</p>
<p>开始-&gt;程序-&gt;管理工具-&gt;本地安全策略-&gt;安全策略-&gt;本地策略-&gt;用户权限分配，双击&#8220;从网络访问此计算机&#8221;，添加IIS默认用户或者其所属的组。</p>
<p>注意：一般自定义 IIS默认匿名访问帐号都属于组，为了安全，没有特殊需要，请遵循此规则。</p>
<p>2、错误号401.2 HTTP 错误 401.2 - 未经授权：访问由于服务器配置被拒绝。原因：关闭了匿名身份验证</p>
<p>解决方案：</p>
<p>运行inetmgr，打开站点属性-&gt;目录安全性-&gt;身份验证和访问控制-&gt;选中&#8220;启用匿名访问&#8221;，输入用户名，或者点击&#8220;浏览&#8221;选择合法的用户，并两次输入密码后确定。</p>
<p>3、错误号：401.3 HTTP 错误 401.3 - 未经授权：访问由于 ACL 对所请求资源的设置被拒绝。</p>
<p>原因：IIS匿名用户一般属于Guests组，而我们一般把存放网站的硬盘的权限只分配给administrators组，这时候按照继承原则，网站文件夹也只有administrators组的成员才能访问，导致IIS匿名用户访问该文件的NTFS权限不足，从而导致页面无法访问。</p>
<p>解决方案：给IIS匿名用户访问网站文件夹的权限，方法：进入该文件夹的安全选项，添加IIS匿名用户，并赋予相应权限，一般是读、写。</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/256303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-02-23 17:43 <a href="http://www.blogjava.net/table/articles/256303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript实现评估用户输入密码的强度</title><link>http://www.blogjava.net/table/articles/255302.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Wed, 18 Feb 2009 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/255302.html</guid><wfw:comment>http://www.blogjava.net/table/comments/255302.html</wfw:comment><comments>http://www.blogjava.net/table/articles/255302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/255302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/255302.html</trackback:ping><description><![CDATA[密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失。作为网站设计者,如果我们在网页中能对用户输入的密码进行安全评估,并显示出相应的提示信息,那么对用户设置一个安全的密码将有很大帮助。同时也使得网站更具人性化,更有吸引力.<br />
<p style="text-indent: 2em">什么是一个安全的密码呢?本程序按以下的方式进行评估.</p>
<p style="text-indent: 2em">1.如果密码少于5位,那么就认为这是一个弱密码.</p>
<p style="text-indent: 2em">2.如果密码只由数字、小写字母、大写字母或其它特殊符号当中的一种组成,则认为这是一个弱密码.</p>
<p style="text-indent: 2em">3.如果密码由数字、小写字母、大写字母或其它特殊符号当中的两种组成,则认为这是一个中度安全的密码.</p>
<p style="text-indent: 2em">4.如果密码由数字、小写字母、大写字母或其它特殊符号当中的三种以上组成,则认为这是一个比较安全的密码.</p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">具体程序如下(演示地址:www.netInter.cn/reg):</p>
<textarea class="code" style="width: 90%" name="textarea" rows="20" cols="0">以下是代码片段,您可以CTRL+A,然后复制。
&lt;script language=javascript&gt;
//程序设计:环球万维,专业提供虚拟主机,域名注册服务
//网址:www.netInter.cn
//本程序是环球万维原创程序,若需转载,请注明网址及出处,谢谢.
//以上信息与文章正文是不可分割的一部分,所以如果您要转载本文章,您必须保留以上信息.
//CharMode函数
//测试某个字符是属于哪一类.
function CharMode(iN){
if (iN&gt;=48 &amp;&amp; iN &lt;=57) //数字
return 1;
if (iN&gt;=65 &amp;&amp; iN &lt;=90) //大写字母
return 2;
if (iN&gt;=97 &amp;&amp; iN &lt;=122) //小写
return 4;
else
return 8; //特殊字符
}
//bitTotal函数
//计算出当前密码当中一共有多少种模式
function bitTotal(num){
modes=0;
for (i=0;i&lt;4;i++){
if (num &amp; 1) modes++;
num&gt;&gt;&gt;=1;
}
return modes;
}
//checkStrong函数
//返回密码的强度级别
function checkStrong(sPW){
if (sPW.length&lt;=4)
return 0;  //密码太短
Modes=0;
for (i=0;i&lt;sPW.length;i++){
//测试每一个字符的类别并统计一共有多少种模式.
Modes|=CharMode(sPW.charCodeAt(i));
}
return bitTotal(Modes);
}
//pwStrength函数
//当用户放开键盘或密码输入框失去焦点时,根据不同的级别显示不同的颜色
function pwStrength(pwd){
O_color="#eeeeee";
L_color="#FF0000";
M_color="#FF9900";
H_color="#33CC00";
if (pwd==null||pwd==''){
Lcolor=Mcolor=Hcolor=O_color;
}
else{
S_level=checkStrong(pwd);
switch(S_level)  {
case 0:
Lcolor=Mcolor=Hcolor=O_color;
case 1:
Lcolor=L_color;
Mcolor=Hcolor=O_color;
break;
case 2:
Lcolor=Mcolor=M_color;
Hcolor=O_color;
break;
default:
Lcolor=Mcolor=Hcolor=H_color;
}
}
document.getElementById("strength_L").style.background=Lcolor;
document.getElementById("strength_M").style.background=Mcolor;
document.getElementById("strength_H").style.background=Hcolor;
return;
}
&lt;/script&gt;
&lt;form name=form1 action="" &gt;
输入密码:&lt;input type=password size=10 onKeyUp=pwStrength(this.value) onBlur=pwStrength(this.value)&gt;
&lt;br&gt;密码强度:
&lt;table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc" height="23" style='display:inline'&gt;
&lt;tr align="center" bgcolor="#eeeeee"&gt;
&lt;td width="33%" id="strength_L"&gt;弱&lt;/td&gt;
&lt;td width="33%" id="strength_M"&gt;中&lt;/td&gt;
&lt;td width="33%" id="strength_H"&gt;强&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
</textarea>
<img src ="http://www.blogjava.net/table/aggbug/255302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-02-18 16:31 <a href="http://www.blogjava.net/table/articles/255302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常备JS操作</title><link>http://www.blogjava.net/table/articles/255301.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Wed, 18 Feb 2009 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/255301.html</guid><wfw:comment>http://www.blogjava.net/table/comments/255301.html</wfw:comment><comments>http://www.blogjava.net/table/articles/255301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/255301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/255301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: //事件源对象 event.srcElement.tagName event.srcElement.type //捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); //事件按键 event.keyCode event.shiftKey event.altKey eve...&nbsp;&nbsp;<a href='http://www.blogjava.net/table/articles/255301.html'>阅读全文</a><img src ="http://www.blogjava.net/table/aggbug/255301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-02-18 16:27 <a href="http://www.blogjava.net/table/articles/255301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>神奇的代码</title><link>http://www.blogjava.net/table/articles/255299.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Wed, 18 Feb 2009 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/255299.html</guid><wfw:comment>http://www.blogjava.net/table/comments/255299.html</wfw:comment><comments>http://www.blogjava.net/table/articles/255299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/255299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/255299.html</trackback:ping><description><![CDATA[这是一段神奇的代码，利用此代码黑掉Google、Baidu&#8230;&#8230;简直就是举手之劳啊！<br />
只要你在IE浏览器任意打开一个网站，然后在浏览器上输入如下代码<br />
<br />
代码如下<br />
<em>javascript</em>:document.body.contentEditable='true'; document.designMode='on'; void 0<br />
然后回车，你就可以随心所欲的修改这个网站啦！<br />
想想google的页面被自己改得面目全非，是不是过足了黑客瘾啊！<br />
<br />
输入如下代码，将退出编辑状态!<br />
<em>javascript</em>:document.body.contentEditable='false'; void 0<br />
<br />
注：以上代码纯属娱乐
<h6 style="font-weight: normal; font-size: 12px; float: left; width: 100%"></h6>
<img src ="http://www.blogjava.net/table/aggbug/255299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-02-18 16:18 <a href="http://www.blogjava.net/table/articles/255299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>frameset使用技巧</title><link>http://www.blogjava.net/table/articles/246383.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246383.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246383.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246383.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">
<p>■ <strong>框架标记：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;FRAMESET&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;FRAME&gt; <br />
　　&lt;NOFRAMES&gt; <br />
　　&lt;IFRAME&gt;</p>
<p>■ <strong>框架概念 ：</strong><br />
　　谓框架便是网页画面分成几个框窗，同时取得多个 URL。只需要 &lt;FRAMESET&gt; &lt;FRAME&gt; 即可，面所有框架标记需要放在一个总起的 html 档，这个档案只记录了该框架如何分割 ，不会显示任何资料，所以不必放入 &lt;BODY&gt; 标记，浏览这框架必须读取这档案 面不是其他框窗的档案。&lt;FRAMESET&gt; 是用来划分框窗，每一窗框由一个 &lt;FRAME&gt; 标 记所标示，&lt;FRAME&gt;必须在 &lt;FRAMESET&gt; 范围中使用。如下例： </p>
<p>　　&lt;frameset cols="50%,*"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;frame name="hello" src="up2u.html"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;frame name="hi" src="me2.html"&gt; <br />
　　&lt;/frameset&gt; </p>
<p>　　此例中 &lt;FRAMESET&gt; 把画面分成左右两相等部分，左便是显示 up2u.html，右边则会显示 me2.html 这档案，&lt;FRAME&gt; 标记所标示的框窗永远是按由上而下、由左至右的次序。</p>
<p>&lt;frame&gt;属性：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="..."定义帧的名字<br />
　　scr="..."定义在帧中显示的内容的来源<br />
　　frameborder="..."定义帧之间的边界(0或1)<br />
　　margwidth="..."设置帧的边界和其中内容之间的间距<br />
　　margheight="..."设置帧的边界和其中内容之间的间距化<br />
　　noresize="..."使帧的尺寸不能变<br />
　　scrolling="..."设置滚动条的表示方式(auto, yes, no)</p>
<p>&lt;frameset&gt;属性：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows="..."设定行的数目<br />
　　cols="..."设定列的数目<br />
　　onload="..."当载入文档时的内部事件触发器<br />
　　onunload="..."当卸载文档时的内部事件触发器</p>
<p><strong>frameset大致还有如下效果参数</strong>：</p>
<p>COLS="90,*" <br />
垂直切割画面(如分左右两个画面)，接受整数值、百分数， * 则代表占用剩余的空间。数值的个数代表分成的视窗数目且以逗号分隔。例如 COLS="30,*,50%" 可以切成三个视窗，第一个视窗是 30 pixels 的宽度，为一绝对分割，第二个视窗是当分配完第一及第三个视窗后剩下的空间，第三个视窗则占整个视窗画面的 50% 宽度为一相对分割。你可自己调整数字。&nbsp;&nbsp;</p>
<p>ROWS="120,*" <br />
这是横向切割，将画面上下分开，数值设定同上。 COLS 与 ROWS 两参数尽量不要放在同一个 &lt;FRAMESET&gt; 标记中，因 Netacape 偶然不能显示这类型的框架，尽量采用多重分割，如以上各例。 </p>
<p>frameborder="0" <br />
设定框架的边框，其值只有 0 和 1 ， 0 表示不要边框， 1 表示要显示边框。&nbsp;&nbsp;</p>
<p>border="0" <br />
设定框架的边框厚度，以 pixels 为单位。&nbsp;&nbsp;</p>
<p>bordercolor="#008000" <br />
设定框架的边框颜色。颜色值请参考【调色原理】。&nbsp;&nbsp;</p>
<p>framespacing="5" <br />
表示框架与框架间保留的空白的距离。</p>
<p><strong>frame大致还有如下效果参数：</strong></p>
<p>SRC="a.html"<br />
设定此框窗中要显示的网页档案名称，每个框窗一定要对应一个网页档案。 </p>
<p>NAME="top"<br />
设定这个框窗的名称，这样才能指定框架来作链接，必须但任意命名。&nbsp;&nbsp;</p>
<p>frameborder=0<br />
设定框架的边框，其值只有 0 和 1 ， 0 表示不要边框， 1 表示要边框。&nbsp;&nbsp;</p>
<p>framespacing="6"<br />
表示框架与框架间的保留的空白的距离。&nbsp;&nbsp;</p>
<p>bordercolor="#008000"<br />
设定框架的边框颜色。&nbsp;&nbsp;</p>
<p>scrolling="Auto"<br />
设定是否要显示卷轴，YES 表示要显示卷轴，NO 表示无论如何都不要显示卷轴，AUTO 视情况而定。 </p>
<p>noresize<br />
设定不让使用者可以改变这个框框的大小，如没有设定此参数，使用者可随意地拉动框架改变其大小。&nbsp;&nbsp;</p>
<p>marginhight=5<br />
表示框架高度部分边缘所保留的空间。&nbsp;&nbsp;</p>
<p>marginwidth=5<br />
表示框架宽度部分边缘所保留的空间。</p>
</div>
<br />
<img src ="http://www.blogjava.net/table/aggbug/246383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:56 <a href="http://www.blogjava.net/table/articles/246383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式过滤HTML危险脚本</title><link>http://www.blogjava.net/table/articles/246379.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246379.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246379.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246379.html</trackback:ping><description><![CDATA[<span class="t18"><font color="#666699">在做一些网站（特别是bbs之类）时，经常会有充许用户输入html样式代码，却禁止脚本的运行的需求, 以达到丰富网页样式，禁止恶意代码的运行。 <br />
当然不能用 htmlencode 和 htmldecode 方法,因为这样连基本的html代码会被禁止掉。 <br />
我在网上搜索，也没有找到好的解决办法，倒是收集了一些脚本攻击的实例： <br />
1. &lt;script&gt;标记中包含的代码 <br />
2. &lt;a href=</font><a href="http://www.knowsky.com/article.asp?typeid=36" snap_preview_added="no"><font color="#666699">javascript</font></a><font color="#666699">:...中的代码 <br />
3. 其它基本控件的 on...事件中的代码 <br />
4. iframe 和 frameset 中载入其它页面造成的攻击 <br />
有了这些资料后，事情就简单多了，写一个简单的方法，用正则表达式把以上符合几点的代码替换掉: <br />
public string wipescript(string html) <br />
{ <br />
system.text.regularexpressions.regex regex1 = new system.text.regularexpressions.regex(@"&lt;script[\s\s]+&lt;/script *&gt;",system.text.regularexpressions.regexoptions.ignorecase); <br />
system.text.regularexpressions.regex regex2 = new system.text.regularexpressions.regex(@" href *= *[\s\s]*script *:",system.text.regularexpressions.regexoptions.ignorecase); <br />
system.text.regularexpressions.regex regex3 = new system.text.regularexpressions.regex(@" on[\s\s]*=",system.text.regularexpressions.regexoptions.ignorecase); <br />
system.text.regularexpressions.regex regex4 = new system.text.regularexpressions.regex(@"&lt;iframe[\s\s]+&lt;/iframe *&gt;",system.text.regularexpressions.regexoptions.ignorecase); <br />
system.text.regularexpressions.regex regex5 = new system.text.regularexpressions.regex(@"&lt;frameset[\s\s]+&lt;/frameset *&gt;",system.text.regularexpressions.regexoptions.ignorecase); <br />
html = regex1.replace(html, ""); //过滤&lt;script&gt;&lt;/script&gt;标记 <br />
html = regex2.replace(html, ""); //过滤href=javascript: (&lt;a&gt;) 属性 <br />
html = regex3.replace(html, " _disibledevent="); //过滤其它控件的on...事件 <br />
html = regex4.replace(html, ""); //过滤iframe <br />
html = regex5.replace(html, ""); //过滤frameset <br />
return html; <br />
} <br />
此方法输入可能包含脚本的html代码，返回则就是干净的代码了。</font></span>
<img src ="http://www.blogjava.net/table/aggbug/246379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:50 <a href="http://www.blogjava.net/table/articles/246379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS滤镜简要</title><link>http://www.blogjava.net/table/articles/246378.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246378.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246378.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246378.html</trackback:ping><description><![CDATA[<p>CSS滤镜属性表：</p>
<p>
<table width="100%" border="1">
    <tbody>
        <tr>
            <td align="center" width="28%" height="20">滤镜效果</td>
            <td width="72%">描述</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Alpha</td>
            <td width="72%">设置透明度</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Blru</td>
            <td width="72%">建立模糊效果</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Chroma</td>
            <td width="72%">把指定的颜色设置为透明</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">DropShadow</td>
            <td width="72%">建立一种偏移的影象轮廓，即投射阴影</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">FlipH</td>
            <td width="72%">水平反转</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">FlipV</td>
            <td width="72%">垂直反转</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Glow</td>
            <td width="72%">为对象的外边界增加光效</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Grayscale</td>
            <td width="72%">降低图片的彩色度</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Invert</td>
            <td width="72%">将色彩、饱和度以及亮度值完全反转建立底片效果</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Light</td>
            <td width="72%">在一个对象上进行灯光投影</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Mask</td>
            <td width="72%">为一个对象建立透明膜</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Shadow</td>
            <td width="72%">建立一个对象的固体轮廓，即阴影效果</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Wave</td>
            <td width="72%">在X轴和Y轴方向利用正弦波纹打乱图片</td>
        </tr>
        <tr>
            <td align="center" width="28%" height="20">Xray</td>
            <td width="72%">只显示对象的轮廓</td>
        </tr>
    </tbody>
</table>
</p>
<p>1、Alpha 滤镜&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;<span class="sfont">语法：{FILTER：ALPHA(opacity=opacity,finishopacity=finishopacity,style=style,startx=startx,<br />
starty=starty,finishx=finishx,finishy=finishy)}</span></p>
<span class="sfont">
<p><span class="sfont">2、Blur 滤镜</span></p>
<p><span class="sfont">语法：对于HTML：{filter:blur(add=add,direction=direction,strength=strength)}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于Script语言： [oblurfilter=] object.filters.blur<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模糊效果</span></p>
<span class="sfont">
<p>3、FlipH, FlipV 滤镜</p>
<p>语法：{filter:filph} ,{filter:filpv} 分别是水平反转和垂直反转</p>
<p><span class="sfont"><span class="sfont">4、Chroma 滤镜</span></span></p>
<p><span class="sfont"><span class="sfont">语法：{filter:chroma(color=color)}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用&#8221;Chroma"属性可以设置一个对象中指定的颜色为透明色，参数COLOR即要透明的颜色。下面是兰色文字，然后用Chroma 滤镜过滤掉兰色，就成了下面的样子。</span></span></p>
</span></span>
<p><span class="sfont"><span class="sfont">5、DropShadow 滤镜</span></span></p>
<p><span class="sfont"><span class="sfont">语法：{filter:dropshadow(color=color,offx=ofx,offy=offy,positive=positive)}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="sfont"><span class="sfont">&#8220;DropShaow"顾名思义就是添加对象的阴影效果。</span></span></p>
<span class="sfont"><span class="sfont">
<p><span class="sfont"><span class="sfont">6、Glow 滤镜</span></span></p>
<p><span class="sfont"><span class="sfont">语法：{filter:glow(color=color,strength)}<br />
当对一个对象使用"glow"属性后，这个对象的边缘就会产生类似发光的效果。&#8220;COLOR&#8221;是指定发光的颜色，&#8220;STRENGTH&#8221;则是强度的表现，可以从1到255之间的任何整数来指定这个力度。如filter:glow(color=red,strength=10)</span></span></p>
<p><span class="sfont"><span class="sfont">7、Gray ,Invert,Xray 滤镜</span></span></p>
<p><span class="sfont">语法：{filter:gray} ,{filter:invert},{filter:xray}</span></p>
<p><span class="sfont">Gray滤镜是把一张图片变成灰度图；Invert滤镜是把对象的可视化属性全部翻转，包括色彩、饱和度、和亮度值；Xray滤镜是让对象反映出它的轮廓并把这些轮廓加亮，也就是所谓的&#8220;X&#8221;光片。</span></p>
<span class="sfont">
<p><span class="sfont">8、Light&nbsp;&nbsp;&nbsp; 滤镜</span></p>
<p><span class="sfont">语法：Filter{light}</span></p>
<p><span class="sfont">这个属性模拟光源的投射效果。一旦为对象定义了&#8220;LIGHT"滤镜属性，那么就可以调用它的&#8220;方法(Method)"来设置或者改变属性。</span></p>
<p><span class="sfont">9、Mask 滤镜</span></p>
<p><span class="sfont">语法：{filter:mask(color=color)}</span></p>
<p><span class="sfont">使用"MASK"属性可以为对象建立一个覆盖于表面的膜，其效果就象戴者有色眼镜看物体一样。</span></p>
<span class="sfont">
<p><span class="sfont">10、Shadow 滤镜</span></p>
<p><span class="sfont">语法：{filter:shadow(color=color,direction=direction)}</span></p>
<p><span class="sfont"><span class="sfont">11、Wave 滤镜：</span></span></p>
<p><span class="sfont"><span class="sfont">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class="sfont">语法：{filter:wave(add=add,freq=freq,lightstrength=strength,phase=phase,strength=strength)}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "wave" 属性把对象按垂直的波形样式打乱。默认是&#8220;TRUE（非0）&#8221;，</span> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="sfont">&#8220;ADD&#8221;表示是否要把对象按照波形样式打乱，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="sfont">&#8220;FREQ&#8221;是波纹的频率，也就是指定在对象上一共需要产生多少个完整的波纹，</span><span class="sfont"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;LIGHTSTRENGTH&#8221;参数可以对于波纹增强光影的效果，范围0----100，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="sfont">&#8220;PHASE&#8221;参数用来设置正弦波的偏移量。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="sfont">&#8220;STRENGTH&#8221;代表振幅大小。</span></span></p>
</span></span></span></span>
<img src ="http://www.blogjava.net/table/aggbug/246378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:48 <a href="http://www.blogjava.net/table/articles/246378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>div的定位问题</title><link>http://www.blogjava.net/table/articles/246377.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246377.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246377.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246377.html</trackback:ping><description><![CDATA[&nbsp;层的随意定位的特性给网页设计者带来的很大的方便，但同时也带来了一定的麻烦。为什么这样说呢？
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道，为了让网页能够自动地适应用户设置的分辨率，在网页制作过程中人们采用了百分比的设置方式，从而页面的所有元素从新排版，保证原来的格式。但如果你在页面上使用了层，你会发现当浏览器大小改变时，层的位置却没有改变，结果它和其他的元素之间的配合出现了错位现象，页面变得杂乱无章了。而我们是不能够强制用户使用特定的分辨率的，那么就只有想办法让层的位置也能够象表格一样根据浏览器大小的改变而重新定位，这就需要合理地使用相对定位和绝对定位了。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 绝对定位（position:absolute）：即层默认的定位方式，绝对于浏览器左上角的边缘开始计算定位数值。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相对定位（position:relative）：层的位置相对于某个元素设置，该元素位置改变，则层的位置相应改变。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对比两种定位方式，不难发现，使用相对定位的层才是真正实现设计者思想的方式，从而完全掌握层的排版。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 绝对定位有没有用呢？当然有用了，当你的网页全部使用层来排版，而且页面是使用默认的居左放置的，那么使用默认的绝对定位方式可以方便的排版，提高设计的工作效率。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Dreamweaver中，插入的层虽然都是使用的绝对（absolute）定位方式，但是插入的方式不同，带来的效果是不同的。前面我们已经知道，使用菜单插入的层是没有定位的坐标的，只有当你使用鼠标拖动该层改变其位置后，才会写入坐标值。而拖拉出来的层的初始位置坐标就是鼠标开始动作时的坐标。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请明确一个概念：由Dreanweaver赋予坐标值的层是绝对于浏览器边缘定位的层。不带坐标值的层则是相对于某元素定位的层！ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，最简单的设置相对定位层的的方式就是：选定插入层的位置（例如某个单元格或者页面中某处）将光标停留在该位置，然后选择Insert--&gt;Layer，即可在该位置创建一个固定大小的层，这个层就是相对于该位置定位的了。需要注意，采用这种方式创建的层，你只可以使用鼠标调整它的大小，绝对不可以移动它的位置！也就是说，在属性面板上，层的位置栏中（Left Top）绝对不可以有数值。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多情况下，插入的层的位置并不一定准确，特别是Dreamweaver并非真正的所见即所得的软件，网页的排版只有到浏览器中显示才可以真正看到排版的表现，所以上面所说的方法就显的过于简单而容易出问题了。这个时候，你需要给层一个定位的参照物，让它真正地做到相对的定位。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单的参照物可以是一个父层，即先插入一个相对定位的空白的层，在此层中插入你真正需要的层，而这个层是可以随意拖拉改变位置的。但这样毕竟在网页中多插入了一个空白的层，我想它一定不是专业的网页设计师所希望的。下面我们介绍使用CSS来实现真正的相对定位的层。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们需要先设置一个CSS Class，来定义定位的方式为相对： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ceng { position: relative; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后，赋予你所需要的参照物（可以是 table,tr,td... ）一个 CSS属性为这个类。这样浏览器就会以它的左上角为原点，建立新的坐标系。再在这个参照物的下级插入层，则层绝对于该参照物定位，如果你需要改变层的位置，你可以直接在层的属性面板上输入Left Top的数值（不可以使用鼠标拖拉），切记此数值的坐标原点是你所指定的参照物，而不是浏览器的边缘（在Dreamweaver中编辑时，该层看起来象是绝对于页面边缘定位的，但在浏览器中，它是绝对于你所指定的参照物的）。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多朋友使用层是为了等到动态的效果，例如使用时间线让某个物体运动起来，增加网页的动感，那么相对定位后的层还可以运动吗？回答当然是肯定的。由于定义对象的两个位置需要拖动该对象改变位置，所以使用简单的层定位的方法是不行的，但如果你使用CSS来设置相对定位的效果的话，那么就完全可以实现了。只是需要注意，定义运动的初始位置和结束位置时，你仍然不可以使用鼠标拖拉，而只能自行输入Left和Top的数值。</p>
<img src ="http://www.blogjava.net/table/aggbug/246377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:47 <a href="http://www.blogjava.net/table/articles/246377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE浏览器图片乱飞代码</title><link>http://www.blogjava.net/table/articles/246376.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246376.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246376.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246376.html</trackback:ping><description><![CDATA[<p><span class="tpc_content"><font color="#33cccc">在带图的IE地址栏中输如下代码：</font></span></p>
<p><span class="tpc_content"><span class="tpc_content"><font color="#33cccc" size="2">javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);</font></span></span></p>
<p><span class="tpc_content"><span class="tpc_content"><font color="#33cccc" size="2">好玩不？</font></span></span></p>
<img src ="http://www.blogjava.net/table/aggbug/246376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:46 <a href="http://www.blogjava.net/table/articles/246376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>层的绝对居中应用</title><link>http://www.blogjava.net/table/articles/246374.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246374.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246374.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246374.html</trackback:ping><description><![CDATA[<p>1、利用负边距方法，绝对定位使容器相对屏幕<strong style="color: black; background-color: #a0ffff">绝对居中</strong>，此时的被嵌套容器只能为绝对大小。（标准）<br />
&lt;div style="background:#f00; width:740px; height:340px; left:50%; margin:-170px 0 0 -370px; position:absolute; top:50%;"&gt;&lt;/div&gt;</p>
<p>2、老外给出的另类方法，巧妙利用display:inline-block;，IE6.0测试通过。（标准）<br />
<br />
注意height:100%是关键,edge与container没有嵌套关系：</p>
<p>&lt;style&gt;<br />
body { margin:0; height:100%;}<br />
#edge { width:0; height:100%; display:inline-block; vertical-align:middle;} <br />
#container { text-align:center; width:100%; display:inline-block; vertical-align:middle;}<br />
&lt;/style&gt;</p>
<p>&lt;!-- required for xhtml1.1 validation only --&gt;<br />
&lt;span id="edge"&gt;&lt;/span&gt; <br />
&lt;span id="container"&gt;<br />
&nbsp;&nbsp; &lt;div style="width:200px; height:50px; background:#f00; line-height:50px;"&gt;仅IE6.0环境下实现&lt;/div&gt;<br />
&lt;/span&gt;</p>
<p>还有不介绍了...</p>
<img src ="http://www.blogjava.net/table/aggbug/246374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:36 <a href="http://www.blogjava.net/table/articles/246374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>页面字体放大放小</title><link>http://www.blogjava.net/table/articles/246372.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246372.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246372.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246372.html</trackback:ping><description><![CDATA[<p>&lt;script&gt;<br />
function turnnum(m) {<br />
var o1=document.all('num');<br />
var o2=document.all('txt');<br />
i=parseInt(o1.value);<br />
if (m!=0) i++; <br />
else i--;<br />
o1.value=i.toString(10);<br />
eval('o2.style.fontSize="'+o1.value+'px"')}<br />
&lt;/script&gt;</p>
<p>&lt;div id=txt style="line-height:18px;text-indent: 0px;font-size:12px;"&gt;<br />
请您用下面的按钮加减这段文字的text-indent属性的值（单位是px）。看一看会发生什么，然后您就会明白这个属性的意义。&lt;/div&gt;<br />
&lt;div style="background:#CCCCCC;height:24px;padding:2px;"&gt;<br />
&lt;input id=num type=text value="0" size=19 readonly&gt;&amp;nbsp;<br />
&lt;input type=button value="&amp;nbsp;+&amp;nbsp;" onclick="turnnum(9)"&gt;&amp;nbsp;<br />
&lt;input type=button value="&amp;nbsp;-&amp;nbsp;" onclick="turnnum(0)"&gt;<br />
&lt;/div&gt;</p>
<img src ="http://www.blogjava.net/table/aggbug/246372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:33 <a href="http://www.blogjava.net/table/articles/246372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax检测用户名（email格式的用户名）</title><link>http://www.blogjava.net/table/articles/246370.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246370.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246370.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246370.html</trackback:ping><description><![CDATA[<p>&lt;input name=email class=clear_input id=email maxlength="50" value="&lt;%=email%&gt;" onBlur="javascript:checkEnglish()"/&gt;<br />
&lt;span id=reg_email_error style="DISPLAY: none"&gt;ReadyState&lt;/span&gt;</p>
<p>function checkEnglish(){<br />
if (!CheckIfEnglish(document.insertForm.email.value )) {<br />
&nbsp;&nbsp; alert("请输入数字，字母和下划线！");<br />
&nbsp;&nbsp; document.insertForm.email.value="";<br />
&nbsp;&nbsp; document.insertForm.email.focus();<br />
&nbsp;&nbsp; return false;<br />
}<br />
else {<br />
&nbsp;&nbsp; doCheck();<br />
&nbsp;&nbsp; return true;<br />
}<br />
}</p>
<p>function CheckIfEnglish( String ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var c;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(String.charAt( 0 )=='-')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if( String.charAt( String.length - 1 ) == '-' )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; for( i = 0; i &lt; String.length; i ++ ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = String.charAt( i );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Letters.indexOf( c ) &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />
}</p>
<p><font color="#800000"><strong>ajax.js</strong></font></p>
<p>//定义XMLHttpRequest对象实例<br />
var http_request = false;<br />
//定义可复用的http请求发送函数<br />
function send_request(method,url,content,responseType,callback) {//初始化、指定处理函数、发送请求的函数<br />
&nbsp;&nbsp;&nbsp;&nbsp; http_request = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //开始初始化XMLHttpRequest对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(window.XMLHttpRequest) { //Mozilla 浏览器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request = new XMLHttpRequest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (http_request.overrideMimeType) {//设置MiME类别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.overrideMimeType("text/xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if (window.ActiveXObject) { // IE浏览器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request = new ActiveXObject("Msxml2.XMLHTTP");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (e) {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (!http_request) { // 异常，创建对象实例失败<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.alert("不能创建XMLHttpRequest对象实例.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(responseType.toLowerCase()=="text") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //http_request.onreadystatechange = processTextResponse;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.onreadystatechange = callback;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(responseType.toLowerCase()=="xml") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //http_request.onreadystatechange = processXMLResponse;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.onreadystatechange = callback;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.alert("响应类别参数错误。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 确定发送请求的方式和URL以及是否异步执行下段代码<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(method.toLowerCase()=="get") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.open(method, url, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(method.toLowerCase()=="post") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.open(method, url, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.alert("http请求类别参数错误。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; http_request.send(content);<br />
}<br />
// 处理返回文本格式信息的函数<br />
function processTextResponse() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (http_request.readyState == 4) { // 判断对象状态<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (http_request.status == 200) { // 信息已经成功返回，开始处理信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(http_request.responseText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("Text文档响应。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { //页面不正常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("您所请求的页面有异常。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
//处理返回的XML格式文档的函数<br />
function processXMLResponse() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (http_request.readyState == 4) { // 判断对象状态<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (http_request.status == 200) { // 信息已经成功返回，开始处理信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(http_request.responseXML);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("XML文档响应。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { //页面不正常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("您所请求的页面有异常。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>function <font color="#ff0000">doCheck()</font> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var f = document.forms[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(f.email.value!="") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("reg_email_error").innerHTML = "系统正在处理您的请求，请稍后。";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_request("GET","checkUsername.jsp?email="+f.email.value,null,"text",showFeedbackInfo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("reg_email_error").innerHTML = "请输入用户名称。";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</p>
<p><font color="#800000"><strong>checkUsername.jsp</strong></font></p>
<p>&lt;%@ page contentType="text/html; charset=gbk"%&gt;<br />
&lt;%@ page import="com.beyoung.blog.hql.admin.huiyuangguanli.HuiyuangguanliHql" %&gt;<br />
&lt;%@ page import="com.beyoung.blog.bean.Huiyuangguanli" %&gt;<br />
&lt;%@ page import="com.beyoung.blog.util.strDate.PubFun" %&gt;<br />
&lt;%<br />
String name=request.getParameter("email");<br />
name=PubFun.toGBK(name);<br />
System.out.println(name);<br />
System.out.println(" :"+HuiyuangguanliHql.getHuiyuangguanliHql().getHuiyuangguanliKey(name));<br />
if(!HuiyuangguanliHql.getHuiyuangguanliHql().getHuiyuangguanliKey(name)){&nbsp;&nbsp;<br />
&nbsp;&nbsp; out.println("&lt;font color='#FF0000'&gt;用户名称["+name+"]已占用!&lt;/font&gt;");<br />
}<br />
else{<br />
out.println("&lt;font color='#088EOF'&gt;用户名称["+name+"]尚未被注册，您可以继续。&lt;/font&gt;"); <br />
}<br />
%&gt;</p>
<img src ="http://www.blogjava.net/table/aggbug/246370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 11:31 <a href="http://www.blogjava.net/table/articles/246370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp ajax 延迟加载..</title><link>http://www.blogjava.net/table/articles/246344.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 15 Dec 2008 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/246344.html</guid><wfw:comment>http://www.blogjava.net/table/comments/246344.html</wfw:comment><comments>http://www.blogjava.net/table/articles/246344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/246344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/246344.html</trackback:ping><description><![CDATA[<p>&lt;html&gt;<br />
&lt;script language="javascript"&gt;<br />
function aaa(){<br />
setTimeout("showComment('&lt;%=request.getParameter("userid")%&gt;')",5000) ;&nbsp;&nbsp;&nbsp; //延迟加载<br />
}<br />
function showVistor(){ <br />
document.getElementById("objID").innerHTML="加载完毕";<br />
}<br />
function showComment(userid){ <br />
var ajaxobj=new AJAX(); <br />
ajaxobj.method="GET"; <br />
ajaxobj.url="blogProcess.jsp?action=showComment&amp;userid="+userid; <br />
ajaxobj.callback=function(){<br />
&nbsp;&nbsp;&nbsp; $F("commentcon",ajaxobj.gettext());<br />
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
ajaxobj.send(); <br />
}<br />
function $F(objID,html){<br />
$(objID).innerHTML=html;<br />
}<br />
function $(objID) {<br />
&nbsp;&nbsp; return document.getElementById(objID)<br />
}<br />
&lt;/script&gt;<br />
&lt;body&gt;<br />
&lt;div id="objID"&gt;&amp;nbsp;加载中......&lt;script&gt;aaa()&lt;/script&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/table/aggbug/246344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-12-15 10:43 <a href="http://www.blogjava.net/table/articles/246344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>window.open的例子和使用方法以及参数说明</title><link>http://www.blogjava.net/table/articles/234167.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Tue, 14 Oct 2008 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234167.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234167.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234167.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px"><strong>一、window.open()支持环境：</strong>
<p>　　JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+</p>
<p>　　<strong>二、基本语法：</strong></p>
<p>　　window.open(pageURL,name,parameters) </p>
<p>　　其中：</p>
<p>　　pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) </p>
<p>　　<strong>三、示例：</strong></p>
<p>&lt;SCRIPT&gt; <br />
&lt;!-- <br />
window.open ('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no') <br />
//写成一行 <br />
--&gt; <br />
&lt;/SCRIPT&gt;</p>
<p>　　脚本运行后，page.html将在新窗体newwindow中打开，宽为100，高为400，距屏顶0象素，屏左0象素，无工具条，无菜单条，无滚动条，不可调整大小，无地址栏，无状态栏。</p>
<p>　　请对照。上例中涉及的为常用的几个参数，除此以外还有很多其他参数，请见四。</p>
<p>　　<strong>四、各项参数</strong></p>
<p>　　其中yes/no也可使用1/0；pixel value为具体的数值，单位象素。</p>
<p>参数 | 取值范围 | 说明 <br />
| | <br />
alwaysLowered | yes/no | 指定窗口隐藏在所有窗口之后 <br />
alwaysRaised | yes/no | 指定窗口悬浮在所有窗口之上 <br />
depended | yes/no | 是否和父窗口同时关闭 <br />
directories | yes/no | Nav2和3的目录栏是否可见 <br />
height | pixel value | 窗口高度 <br />
hotkeys | yes/no | 在没菜单栏的窗口中设安全退出热键 <br />
innerHeight | pixel value | 窗口中文档的像素高度 <br />
innerWidth | pixel value | 窗口中文档的像素宽度 <br />
location | yes/no | 位置栏是否可见 <br />
menubar | yes/no | 菜单栏是否可见 <br />
outerHeight | pixel value | 设定窗口(包括装饰边框)的像素高度 <br />
outerWidth | pixel value | 设定窗口(包括装饰边框)的像素宽度 <br />
resizable | yes/no | 窗口大小是否可调整 <br />
screenX | pixel value | 窗口距屏幕左边界的像素长度 <br />
screenY | pixel value | 窗口距屏幕上边界的像素长度 <br />
scrollbars | yes/no | 窗口是否可有滚动栏 <br />
titlebar | yes/no | 窗口题目栏是否可见 <br />
toolbar | yes/no | 窗口工具栏是否可见 <br />
Width | pixel value | 窗口的像素宽度 <br />
z-look | yes/no | 窗口被激活后是否浮在其它窗口之上</p>
<p>　　<strong>例子说明:</strong></p>
<p>【1、最基本的弹出窗口代码】 </p>
<p>其实代码非常简单： </p>
<p>&lt;SCRIPT LANGUAGE="javascript"&gt; <br />
&lt;!-- <br />
window.open ('page.html') <br />
--&gt; <br />
&lt;/SCRIPT&gt; </p>
<p>　　因为着是一段javascripts代码，所以它们应该放在&lt;SCRIPT LANGUAGE="javascript"&gt;标签和&lt;/script&gt;之间。&lt;!-- 和 --&gt;是对一些版本低的浏览器起作用，在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。 </p>
<p>　　window.open ('page.html') 用于控制弹出新的窗口page.html，如果page.html不与主窗口在同一路径下，前面应写明路径，绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以，只是不要混用。 </p>
<p>　　这一段代码可以加入HTML的任意位置，&lt;head&gt;和&lt;/head&gt;之间可以，&lt;body&gt;间&lt;/body&gt;也可以，越前越早执行，尤其是页面代码长，又想使页面早点弹出就尽量往前放。 </p>
<p>　　【2、经过设置后的弹出窗口】 </p>
<p>　　下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的窗口的外观，尺寸大小，弹出的位置以适应该页面的具体情况。 </p>
<p>&lt;SCRIPT LANGUAGE="javascript"&gt; <br />
&lt;!-- <br />
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no') <br />
//写成一行 <br />
--&gt; <br />
&lt;/SCRIPT&gt; </p>
<p>　　参数解释： </p>
<p>&lt;SCRIPT LANGUAGE="javascript"&gt; js脚本开始； <br />
window.open 弹出新窗口的命令； <br />
'page.html' 弹出窗口的文件名； <br />
'newwindow' 弹出窗口的名字（不是文件名），非必须，可用空''代替； <br />
height=100 窗口高度； <br />
width=400 窗口宽度； <br />
top=0 窗口距离屏幕上方的象素值； <br />
left=0 窗口距离屏幕左侧的象素值； <br />
toolbar=no 是否显示工具栏，yes为显示； <br />
menubar，scrollbars 表示菜单栏和滚动栏。 <br />
resizable=no 是否允许改变窗口大小，yes为允许； <br />
location=no 是否显示地址栏，yes为允许； <br />
status=no 是否显示状态栏内的信息（通常是文件已经打开），yes为允许； <br />
&lt;/SCRIPT&gt; js脚本结束 </p>
<p>【3、用函数控制弹出窗口】 </p>
<p>下面是一个完整的代码。 <br />
&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;script LANGUAGE="JavaScript"&gt; <br />
&lt;!-- <br />
function openwin() { window.open ("page.html", "newwindow", "height=100, width=400, toolbar= <br />
no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") <br />
//写成一行 <br />
} <br />
//--&gt; <br />
&lt;/script&gt; <br />
&lt;/head&gt; <br />
&lt;body onload="openwin()"&gt; <br />
...任意的页面内容... <br />
&lt;/body&gt; <br />
&lt;/html&gt; </p>
<p>　　这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。 <br />
怎么调用呢？ </p>
<p>　　方法一：&lt;body onload="openwin()"&gt; 浏览器读页面时弹出窗口； <br />
　　方法二：&lt;body onunload="openwin()"&gt; 浏览器离开页面时弹出窗口； <br />
　　方法三：用一个连接调用： </p>
<p>　　&lt;a href="#" onclick="openwin()"&gt;打开一个窗口&lt;/a&gt; </p>
<p>　　注意：使用的&#8220;#&#8221;是虚连接。 </p>
<p>　　方法四：用一个按钮调用： </p>
<p>　　&lt;input type="button" onclick="openwin()" value="打开窗口"&gt; </p>
<p>　　【4、同时弹出2个窗口】 </p>
<p>　　对源代码稍微改动一下： </p>
<p>&lt;script LANGUAGE="JavaScript"&gt; <br />
&lt;!-- <br />
function openwin() <br />
{ window.open ("page.html", "newwindow", "height=100, width=100, top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") <br />
//写成一行 <br />
window.open ("page2.html", "newwindow2", "height=100, width=100, top=100, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") <br />
//写成一行 <br />
} <br />
//--&gt; <br />
&lt;/script&gt; </p>
<p>　　为避免弹出的2个窗口覆盖，用top和left控制一下弹出的位置不要相互覆盖即可。最后用上面说过的四种方法调用即可。 </p>
<p>　　注意：2个窗口的name(newwindows和newwindow2)不要相同，或者干脆全部为空。OK？ </p>
<p>【5、主窗口打开文件1.htm，同时弹出小窗口page.html】 </p>
<p>如下代码加入主窗口&lt;head&gt;区： <br />
&lt;script language="javascript"&gt; <br />
&lt;!-- <br />
function openwin() <br />
{window.open("page.html","","width=200,height=200") <br />
} <br />
//--&gt; <br />
&lt;/script&gt; </p>
<p>　　加入&lt;body&gt;区： </p>
<p>&lt;a href="1.htm" onclick="openwin()"&gt;open&lt;/a&gt;即可。 </p>
<p>【6、弹出的窗口之定时关闭控制】 </p>
<p>　　下面我们再对弹出的窗口进行一些控制，效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的HTML中，可不是主页面中，否则...)，让它10秒后自动关闭是不是更酷了？ </p>
<p>　　首先，将如下代码加入page.html文件的&lt;head&gt;区： </p>
<p>&lt;script language="JavaScript"&gt; <br />
function closeit() <br />
{setTimeout("self.close()",10000) file://毫秒} <br />
&lt;/script&gt; </p>
<p>　　然后，再用&lt;body onload="closeit()"&gt; 这一句话代替page.html中原有的&lt;BODY&gt;这一句就可以了。(这一句话千万不要忘记写啊！这一句的作用是调用关闭窗口的代码，10秒钟后就自行关闭该窗口) </p>
<p>【7、在弹出窗口中加上一个关闭按钮】 </p>
<p>&lt;FORM&gt; <br />
&lt;INPUT TYPE='BUTTON' VALUE='关闭' onClick='window.close()'&gt; <br />
&lt;/FORM&gt; </p>
<p>　　呵呵，现在更加完美了！ </p>
<p>【8、内包含的弹出窗口-一个页面两个窗口】 </p>
<p>　　上面的例子都包含两个窗口，一个是主窗口，另一个是弹出的小窗口。 </p>
<p>　　通过下面的例子，你可以在一个页面内完成上面的效果。 </p>
<p>&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;SCRIPT LANGUAGE="JavaScript"&gt; <br />
function openwin() <br />
{OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no"); <br />
//写成一行 <br />
OpenWindow.document.write("&lt;TITLE&gt;例子&lt;/TITLE&gt;") <br />
OpenWindow.document.write("&lt;BODY BGCOLOR=#ffffff&gt;") <br />
OpenWindow.document.write("&lt;h1&gt;Hello!&lt;/h1&gt;") <br />
OpenWindow.document.write("New window opened!") <br />
OpenWindow.document.write("&lt;/BODY&gt;") <br />
OpenWindow.document.write("&lt;/HTML&gt;") <br />
OpenWindow.document.close()} <br />
&lt;/SCRIPT&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;a href="#" onclick="openwin()"&gt;打开一个窗口&lt;/a&gt; <br />
&lt;input type="button" onclick="openwin()" value="打开窗口"&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt; </p>
<p>　　看看 OpenWindow.document.write()里面的代码不就是标准的HTML吗？只要按照格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用OpenWindow.document.close()结束啊。 </p>
<p>【9、终极应用--弹出的窗口之Cookie控制】 </p>
<p>　　回想一下，上面的弹出窗口虽然酷，但是有一点小毛病(沉浸在喜悦之中，一定没有发现吧？)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页)，那么每次刷新这个页面，窗口都会弹出一次，是不是非常烦人？:-(有解决的办法吗？Yes! ;-) Follow me. </p>
<p>　　我们使用cookie来控制一下就可以了。 </p>
<p>　　首先，将如下代码加入主页面HTML的&lt;HEAD&gt;区： </p>
<p>&lt;script&gt; <br />
function openwin() <br />
{window.open("page.html","","width=200,height=200")} <br />
function get_cookie(Name) <br />
{var search = Name + "=" <br />
var returnvalue = ""; <br />
if (document.cookie.length &gt; 0) { <br />
offset = document.cookie.indexOf(search) <br />
if (offset != -1) { <br />
offset += search.length <br />
end = document.cookie.indexOf(";", offset); <br />
if (end == -1) <br />
end = document.cookie.length; <br />
returnvalue=unescape(document.cookie.substring(offset,end)) <br />
} <br />
} <br />
return returnvalue; <br />
} <br />
function loadpopup(){ <br />
if (get_cookie('popped')==''){ <br />
openwin() <br />
document.cookie="popped=yes" <br />
} <br />
} <br />
&lt;/script&gt; </p>
<p>　　然后，用&lt;body onload="loadpopup()"&gt;（注意不是openwin而是loadpop啊！）替换主页面中原有的&lt;BODY&gt;这一句即可。你可以试着刷新一下这个页面或重新进入该页面，窗口再也不会弹出了。真正的Pop-Only-Once！ </p>
<p>　　写到这里弹出窗口的制作和应用技巧基本上算是完成了，俺也累坏了，一口气说了这么多，希望对正在制作网页的朋友有所帮助俺就非常欣慰了。 </p>
<p>　　需要注意的是，JS脚本中的的大小写最好前后保持一致。</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-14 10:22 <a href="http://www.blogjava.net/table/articles/234167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入研究JScript语法——常量和变量</title><link>http://www.blogjava.net/table/articles/234153.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Tue, 14 Oct 2008 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234153.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234153.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234153.html</trackback:ping><description><![CDATA[例子：<br />
<br />
前面的例子中：<br />
<br />
return&nbsp;"&lt;font&nbsp;color=gray&gt;"+hit+"&lt;/font&gt;"<br />
<br />
<br />
使用了变量和常量，"&lt;font&nbsp;color=gray&gt;"和"&lt;/font&gt;"是文本常量，hit是变量。<br />
<br />
加号(+)则将三者加成一个文本："&lt;font&nbsp;color=gray&gt;100&lt;/font&gt;"，如果hit为100的话。<br />
<br />
　<br />
<br />
数值常量<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这个很简单，上过数学课的都应该知道如何表示数字，JScript中没有任何特别。<br />
<br />
123<br />
0<br />
-100<br />
100.123<br />
1E3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1000)<br />
<br />
都是合法的数字常量<br />
<br />
文本常量<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这个用的最多，因为经常要动态的生成HTML文本。常量必须用引号括起来：<br />
<br />
"abc"<br />
<br />
"123"<br />
<br />
"文本常量"<br />
<br />
都是合法的文本常量，为什么要用引号？完全没有编程经验的人可能会有些疑惑，其实很简单，<br />
计算机需要把常量和变量区别开。<br />
<br />
变量赋值<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;"abc"<br />
<br />
变量a的值为"abc"了。为什么比较时要用==，为了和赋值区别开呀！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;a&nbsp;+&nbsp;"123"<br />
<br />
变量b的值为"abc123"了。如果常量不加引号如何和变量区别呢？<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;"a"&nbsp;+&nbsp;"123"<br />
<br />
变量b的值为"a123"<br />
<br />
　<br />
<br />
那么如果文本中包含引号如何？比如如何表示：<br />
<br />
&lt;input&nbsp;type=button&nbsp;value="A&nbsp;A"&gt;<br />
<br />
因为按钮的名称里有空格，那么必须用双引号括起来，如何表示这个文本常量？<br />
<br />
JScript还可以使用单引号：<br />
<br />
'&lt;input&nbsp;type=button&nbsp;value="A&nbsp;A"&gt;'<br />
<br />
在单引号中就可以直接使用双引号了。反过来在双引号括起来的常量里可以直接使用单引号。<br />
<br />
"&lt;input&nbsp;type=button&nbsp;value='A&nbsp;A'&gt;"<br />
<br />
那么当常量里两个引号都有该怎么办？这就需要使用转义符号反斜杠\<br />
<br />
"abc'def\"ghi"<br />
<br />
在常量中可以用&#8220;\"&#8221;来表示一个双引号。而且还有：<br />
<br />
\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示回车<br />
\\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示一个反斜杠<br />
<br />
　<br />
<br />
　<br />
<br />
function&nbsp;myname(name){<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(name=="小青"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write("&lt;input&nbsp;type=button&nbsp;value='隐藏小青'&nbsp;onclick=\"mytext.style.display='none'\"&gt;")<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(name)<br />
<br />
}<br />
<br />
上面的函数，当输入name为&#8220;小青&#8221;时，输出：<br />
<br />
&lt;input&nbsp;type=button&nbsp;value='隐藏'&nbsp;onclick="mytext.style.display='none'"&gt;<br />
<br />
　<br />
<br />
变量定义<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;JScript中可以不预先定义变量就直接使用，但是这样往往会带来潜在问题，<br />
所以建议大家使用变量前都先定义好。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;变量有两种类型，定义在函数内部的为局部变量。<br />
<br />
&lt;script&gt;<br />
function&nbsp;myfunc(){<br />
<br />
//变量定义使用var，下面定义了变量a<br />
var&nbsp;a<br />
<br />
//可以一次定义多个变量，用逗号分开<br />
var&nbsp;i,j,k<br />
<br />
//定义的时候还可以给变量赋初值<br />
var&nbsp;a="acb"<br />
<br />
var&nbsp;a=123,b="ddd"<br />
<br />
}<br />
&lt;/script&gt;<br />
<br />
局部变量只在函数内有效，离开函数该变量就不存在了。<br />
<br />
如果定义在函数外则为全局变量：<br />
<br />
&lt;script&gt;<br />
//定义一个全局变量a<br />
var&nbsp;a<br />
&lt;/script&gt;<br />
<br />
该变量在所有函数内外都将有效，除非函数内定义了一个相同名称的变量<br />
<br />
&lt;script&gt;<br />
//定义全局变量a<br />
var&nbsp;a=100<br />
<br />
function&nbsp;myfunc(){<br />
<br />
var&nbsp;a="abc"<br />
<br />
//函数输出的是abc，函数内的变量屏蔽了同名全局变量<br />
document.write(a)<br />
<br />
}<br />
&lt;/script&gt;<br />
<br />
如果不使用var来定义，那么变量是全局变量。因此如果你不明确定义变量在使用，<br />
就可能误用了全局变量，比如：<br />
<br />
&lt;script&gt;<br />
//定义全局变量a<br />
var&nbsp;a="dddd"<br />
<br />
...<br />
<br />
function&nbsp;myfunc(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//函数内只想使用一个临时的变量保存返回结果<br />
&nbsp;&nbsp;&nbsp;&nbsp;a=b+...<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;...<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a<br />
<br />
}<br />
&lt;/script&gt;<br />
<br />
那么一旦执行过myfunc，则原先的全局变量的值就被破坏了，这就可能引起其实使用<br />
该全局变量的程序出错！因此强烈建议大家都明确定义变量，而且尽量少使用全局变量
<img src ="http://www.blogjava.net/table/aggbug/234153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-14 09:48 <a href="http://www.blogjava.net/table/articles/234153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多级下拉菜单的级连显示问题</title><link>http://www.blogjava.net/table/articles/234150.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Tue, 14 Oct 2008 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234150.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234150.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234150.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>多级下拉菜单的级连显示问题。</p>
<p>在这里，我为了实现公司－部门级连显示问题，我编写了leader_add_competence_dialogquery.jsp ，web.xml，SelectCropDepartServlet.java 类。</p>
<p>其中注意的是leader_add_competence_dialogquery中的.jspChange_Select() javascript函数中的/selectCropDepart是在web.xml中定义的servlet类。我们在实现应用当中需要修改的用红字标出。</p>
<p>其中leader_add_competence_dialogquery.jsp代码如下：</p>
<p>&lt;%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %&gt;</p>
<p>&lt;%@ page import="pub.*" %&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;添加领导权限&lt;/title&gt;</p>
<p>&lt;link href="../css/putong.css" type="text/css" rel="stylesheet"&gt;</p>
<p>&lt;base target="_self"&gt;</p>
<p>&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; </p>
<p>&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; </p>
<p>&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; </p>
<p>&lt;/head&gt;</p>
<p>&lt;script language="javascript"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; var req;</p>
<p>&nbsp;&nbsp;&nbsp; window.onload=function(){</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function Change_Select(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var zhi = document.getElementById('Corp').value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "../selectCropDepart?id=" + escape(zhi);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(url);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (window.XMLHttpRequest) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req = new XMLHttpRequest();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if (window.ActiveXObject) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req = new ActiveXObject("Microsoft.XMLHTTP");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(req){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.open("GET", url, true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.onreadystatechange = callback;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.send(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; function callback() {</p>
<p>&nbsp;&nbsp;&nbsp; if (req.readyState == 4) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (req.status == 200) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseMessage();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // update the HTML DOM based on whether or not message is valid</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert ("Not able to retrieve description" +req.status+req.statusText);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; function parseMessage() {</p>
<p>&nbsp;&nbsp;&nbsp; var xmlDoc = req.responseXML.documentElement;</p>
<p>&nbsp;&nbsp;&nbsp; var xSel = xmlDoc.getElementsByTagName('select');</p>
<p>&nbsp;&nbsp;&nbsp; var select_root = document.getElementById('Depart');</p>
<p>&nbsp;&nbsp;&nbsp; select_root.options.length=0;</p>
<p>&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;xSel.length;i++)</p>
<p>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xValue = xSel[i].childNodes[0].firstChild.nodeValue;</p>
<p>&nbsp;&nbsp;&nbsp; var xText = xSel[i].childNodes[1].firstChild.nodeValue;</p>
<p>&nbsp;&nbsp;&nbsp; var option = new Option(xText,xValue);</p>
<p>&nbsp;&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select_root.add(option);&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(e){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function AddLeaderCompetence(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var key=document.all.HiddenKey.value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.from1.action="leader_ctl.jsp?Oper=addCompetence&amp;Key="+key;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.from1.submit();</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&lt;/script&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;%</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strUserID=request.getParameter("Key");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("EmployUserID",strUserID);</p>
<p>%&gt;</p>
<p>&lt;form name="from1" action="leader_ctl.jsp"&nbsp; method="post"&gt;</p>
<p>&lt;table cellSpacing="0" cellPadding="0" width="100%" bgColor="#bfcae6" border="0" background="../images/subtitle.gif"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;tr&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="99%" height="26"&gt;&lt;FONT face="宋体"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;DIV align="left"&gt;&lt;FONT face="宋体" color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;当前位置：系统管理&amp;gt;&amp;gt;领导设置&amp;gt;&amp;gt;添加领导权限&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/FONT&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/DIV&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/FONT&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;</p>
<p>&nbsp; &lt;/table&gt;</p>
<p>&nbsp;&nbsp; &lt;input type="hidden" name="HiddenKey" value="&lt;%=strUserID%&gt;" &gt;</p>
<p>&nbsp; &lt;table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#AABDE0"&gt;</p>
<p>&nbsp; &lt;tr bgcolor="#FFFFFF"&gt;</p>
<p>&nbsp; &lt;td align="right"&gt;公司：&lt;/td&gt;</p>
<p>&nbsp; &lt;td&gt;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; &lt;SELECT name="Corp" id="Corp"&nbsp; onChange="Change_Select()" &gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OPTION value="all" selected&gt;所有公司&lt;/OPTION&gt;&lt;/SELECT&gt;&lt;/td&gt;</p>
<p>&nbsp; &lt;/tr&gt;</p>
<p>&nbsp; &lt;tr bgcolor="#FFFFFF"&gt;</p>
<p>&nbsp; &lt;td align="right"&gt;部门：&lt;/td&gt;</p>
<p>&nbsp; &lt;td&gt;&lt;SELECT name="Depart" id="Depart"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;OPTION value="all" selected&gt;所有部门&lt;/OPTION&gt;&lt;/SELECT&gt;&lt;/td&gt;</p>
<p>&nbsp; &lt;/tr&gt;</p>
<p>&nbsp; &lt;tr bgcolor="#FFFFFF"&gt;</p>
<p>&nbsp; &lt;td colspan="2" align="center"&gt;&lt;input type="button" onClick="AddLeaderCompetence();" class="button" style="width:80px" value="保存"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input type="button" class="button" value="关闭" onClick="window.close();" style="width:80px"&gt; &lt;/td&gt;&nbsp; </p>
<p>&nbsp; &lt;/tr&gt;</p>
<p>&nbsp; &lt;/table&gt;&nbsp; </p>
<p>&lt;/form&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;%&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; Conn conn=new Conn();</p>
<p>&nbsp;&nbsp;&nbsp; String m1Script="";</p>
<p>&nbsp;&nbsp;&nbsp; //String m2Script="";</p>
<p>&nbsp;&nbsp;&nbsp; m1Script=PubClass.BindAllCorpList("document.all.Corp");</p>
<p>&nbsp;&nbsp;&nbsp; //m2Script=PubClass.BindAllDepartList("document.all.Depart",""+session.getAttribute("cropid"));</p>
<p>&nbsp;&nbsp;&nbsp; //sPositionList=conn.bindDropListSel("document.all.PositionName","select * from sys08_Position","PositionName","PositionID"); </p>
<p>%&gt; </p>
<p>&lt;%= m1Script%&gt;</p>
<p>&lt;/html&gt;</p>
<p>&nbsp;</p>
<p>Web.xml代码如下：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p>&lt;web-app version="2.4" </p>
<p>&nbsp;&nbsp;&nbsp; xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" </p>
<p>&nbsp;&nbsp;&nbsp; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" </p>
<p>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> </p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>"&gt;</p>
<p>&nbsp;&nbsp; &lt;servlet&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;selectCropDepart&lt;/servlet-name&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;pub.SelectCropDepartServlet&lt;/servlet-class&gt;</p>
<p>&nbsp; &lt;/servlet&gt;</p>
<p>&nbsp; &lt;servlet-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;selectCropDepart&lt;/servlet-name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/selectCropDepart&lt;/url-pattern&gt;&nbsp; </p>
<p>&nbsp; &lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>&nbsp;</p>
<p>SelectCropDepartServlet.java&nbsp; Servlet类代码如下</p>
<p>/**</p>
<p>&nbsp;* 从sys04_Machine表中取数据进行二级下拉菜单(公司,部门)及关联的servlet类</p>
<p>&nbsp;* @author 邓浩</p>
<p>&nbsp; */</p>
<p>public class SelectCropDepartServlet extends HttpServlet {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SelectCropDepartServlet() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void destroy() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.destroy(); }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * The doGet method of the servlet. &lt;br&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * This method is called when a form has its tag value method equals to get.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param request the request send by the client to the server</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param response the response send by the server to the client</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @throws ServletException if an error occurred</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @throws IOException if an error occurred</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void doGet(HttpServletRequest request, HttpServletResponse response)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/xml"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setCharacterEncoding("UTF-8");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setHeader("Cache-Control", "no-cache");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String targetId = request.getParameter("id").toString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String xml_start ="&lt;selects&gt;";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String xml_end = "&lt;/selects&gt;";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String xml = "";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Conn&nbsp; conn=new Conn();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataTable&nbsp; dt=new DataTable();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String Sql="select * from sys04_Machine where cropid="+targetId;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ////System.out.println("Sql:"+Sql);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml+= "&lt;select&gt;&lt;value&gt;all&lt;/value&gt;&lt;text&gt;所有部门&lt;/text&gt;&lt;/select&gt;" ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i=0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; (conn.querySql(Sql,dt)){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while&nbsp; (i&lt;dt.getRowCount()){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml+= "&lt;select&gt;&lt;value&gt;"+dt.getItemForName(i,"MachID").toString()+"&lt;/value&gt;&lt;text&gt;"+dt.getItemForName(i,"MachName").toString()+"&lt;/text&gt;&lt;/select&gt;";&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=i+1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String last_xml = xml_start + xml + xml_end;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("last_xml:"+last_xml);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; last_xml = new String(last_xml.getBytes("UTF-8"), "GB2312");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().write(last_xml); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }// try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch&nbsp; (Exception e){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(e.getMessage()); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doGet(request,response);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init() throws ServletException {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
</div>
 <img src ="http://www.blogjava.net/table/aggbug/234150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-14 09:41 <a href="http://www.blogjava.net/table/articles/234150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML WebService完全实例详细解析</title><link>http://www.blogjava.net/table/articles/234087.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234087.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234087.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234087.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">首先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有 函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他 们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.
<p>　　webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论xml数据的传输.</p>
<p>　　有了一些对xml webservice的初步了解后,我们将切入正题,即是用一个具体的webservice事例的形式来讲解具体的webservice用法,用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧.</p>
<p>　　这里,我们将以一个简单的分布式课件搜索系统为例来讲解.使用VS2003为编译环境,C#为语言,SqlServcer2000为数据库.(这个例子来 源于一位网上朋友的文章的启发,觉得很能代表webservice的特点,就按那个想法做了这么个系统来示例了)</p>
<p>　　首先,明确我们要做什么.我们需要一个对客户的接口,也就是个站点,我们把它称做ServiceGatherSite,它是何种形式都无所谓,甚至它本身 并不需要数据库,它只是提供给用户一个查询的接口,真正的服务,普通用户是不接触到的.然后,这里我们还需要若干个提供服务的站点,我们可以称它们为资源 站,这里为简单起见,假设有两个资源站,分别叫WebSiteA,WebSiteB,它们可以是不对外公布的,只是为了丰富查询数据而存在.最后,是我们 最需要关注的东西---资源站提供给ServiceGatherSite的服务.两个资源站,就有两个服务,我们称为SiteAService和 SiteBService.两个服务间没有任何关系,内部提供的方法也完全没关联,只是需要把方法如何使用告诉ServiceGatherSite,意思 是,服务只提供查询接口,返回的数据如何处理,服务本身并不管,全由使用服务的站点分配.</p>
<p>　　写了这么多,算是简要的介绍了下有关xml webservice的概念和我们这个例子的结构,下篇文章,我们将开始真正进入代码的设计阶段.</p>
<p>　　上篇文章介绍了些webservice的基本特性和我们例子的结构,这篇文章我们将开始具体的代码编写工作.</p>
<p>　　这个专题主要讲述的是webservice,因此这里我们的代码以Webservice相关为主,而其他工程,例如:ServiceGatherSite,WebSiteA等,只将简略介绍.</p>
<p>　　在VS2003中,开发一个webservice并不是件困难的事,首先,我们新建一个webservice项目(文件-&gt;新建-&gt;项目-&gt;C#-&gt;Web服务应用程序)</p>
<p>　　建完这个工程,我们将看到一个叫Service1.asmx的文件,这就是webservice的标准文件,它也有UI的概念,不过我们一般不关注,因 此,我们查看其cs代码文件.如果你什么都还没做的话,将看见一个被注释掉的helloworld的WebMethod,把注释去掉,在运行,你就可以得 到最简单的webservice运行实例了.点击"helloworld"将执行其方法.显然,这个函数对我们的意义只在于宏观的了解了下web服务的写 法.</p>
<p>　　下面,我们将开始具体介绍webservice的写法.在代码文件里,如果我们写了一个函数后,希望此函数成为外部可调用的接口函数,我们必须在函数上面 添上一行代码[WebMethod(Description="函数的描述信息")],如果你的函数没有这个申明,它将不能被用户引用.如:</p>
<p>&nbsp;</p>
<div class="code">　　[WebMethod(Description="最简单的方法")] <br />
　　public&nbsp;string&nbsp;HelloWorld() <br />
　　{ <br />
　　return&nbsp;"Hello&nbsp;World"; <br />
　　} <br />
　　这个函数就是外部可调用的接口函数,对用户来说相当于一个API.如果某用户在引用了这个服务后,他调用HelloWorld()方法,他就将获得"HelloWorld"这个返回值. <br />
　　看到这里,我们是不是发现,其实webservice并不是那么的神秘,它也不过只是个接口,对我们而言,侧重点依然是接口函数的编写.下面,我将给出我们的例子所需要的接口函数. <br />
　　[WebMethod(Description="查询以获取需要的课件信息")] <br />
　　public&nbsp;XmlDataDocument&nbsp;GetSiteAData(string&nbsp;AssignName) <br />
　　{ <br />
　　XmlDataDocument&nbsp;xd=new&nbsp;XmlDataDocument();&nbsp;// <br />
　　DataSet&nbsp;ds=new&nbsp;DataSet(); <br />
　　CStoreProc&nbsp;cp=new&nbsp;CStoreProc("SearchAssign"); <br />
　　cp.AddParIn("@keywords",SqlDbType.VarChar,30,AssignName); <br />
　　cp.AddParOut("@res",SqlDbType.Int); <br />
　　if(cp.SelectProc())&nbsp;//如果执行成功,存储过程 <br />
　　{ <br />
　　cp.myData.EnforceConstraints=false;&nbsp;//不进行格式严格检查 <br />
　　if((int)cp.GetReturnValue("@res")==-1) <br />
　　{ <br />
　　string&nbsp;xml=""; <br />
　　xd.LoadXml(xml); <br />
　　return&nbsp;xd; <br />
　　} <br />
　　xd=new&nbsp;XmlDataDocument(cp.myData); <br />
　　XmlNode&nbsp;root1=xd.DocumentElement; <br />
　　XmlNodeList&nbsp;roots=root1.SelectNodes("list"); <br />
　　foreach(XmlNode&nbsp;roota&nbsp;in&nbsp;roots)&nbsp;//为所有元素加上站点名称标记 <br />
　　{ <br />
　　XmlElement&nbsp;Link=xd.CreateElement("SiteName"); <br />
　　Link.InnerText=ConfigurationSettings.AppSettings["SiteName"].ToString(); <br />
　　roota.AppendChild(Link); <br />
　　} <br />
　　return&nbsp;xd; <br />
　　} <br />
　　else&nbsp;return&nbsp;null; <br />
　　}</div>
<p>&nbsp;</p>
<p>　　这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定asp.net基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.</p>
<p>　　细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足 条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以xml数据的传输来示例.</p>
<p>　　接上篇文章,我们先简单解释下GetSiteAData(string AssignName)函数.</p>
<p>　　函数功能很简单,只是要返回查询结果,其数据格式是XmlDataDocument.当查询失败时(无匹配查询结果),我们构造一个xml,返回一个空记 录.否则,我们把查询后的dataset生成一个XmlDataDocument,接下来,由于该项目的需要,我加入了一个循环,添加dataset里所 没有的节点,站点名称.在这之后,算是完成了一个符合我们期望格式的xml数据文档,我们把它返回.</p>
<p>　　好了,webservice的方法函数介绍完了(这里还有个web服务方法,稍后介绍),接下来我们的任务是怎么调用它了.首先把webservice的 项目编译完成,假定我们这个服务是针对资源站点A的,我们不妨称其为ServiceA.先单独运行asmx文件,执行GetSiteAData (string AssignName)方法,将提示你输入参数,你输入要搜索的内容,点确认,将返回给你一个xml数据,并在ie上显示出来,这就是你搜索到的内容拉.</p>
<p>　　这里对ServiceA的工作再做点介绍,在我们这个项目里,它是资源站点A提供的服务,意思是,它查询的数据将全来源于站点A,而站点A资源添加在本项目也有专门的工程实现.</p>
<p>　　好了,回到正题.这里我介绍vs调用webservice的方法,其实其他平台的调用方法也是大同小异.首先我们介绍web引用方式,这种方式我强烈建议 调试时使用,非常方便.右击引用,点添加web引用,输入你的webservice地址,如:http: //localhost/aspxproject/WebServiceSolution/SiteBService/service1.asmx,你必 须保证你输入的webservice存在.然后引用即可,注意:web引用名将作为你加入的webservice的名字空间.比如你输入了:SiteA, 那服务的实例化将是这样:SiteA.Service1 serviceA=new SiteA.Service1();(Service1是服务的类名).</p>
<p>　　完成了这一步,service的调用似乎变的那么简单,我们已经实现了远程实例化,接下来的远程调用也是一样的容易.下面给出资源采集站ServiceGatherSite的绑定代码(只采集A站点的信息)</p>
<p>&nbsp;</p>
<div class="code">　　//绑定数据 <br />
　　public&nbsp;void&nbsp;BindData() <br />
　　{ <br />
　　serviceA=new&nbsp;SiteA.Service1(); <br />
　　DataSet&nbsp;ds=new&nbsp;DataSet(); <br />
　　XmlNode&nbsp;xmlNode1; <br />
　　XmlDataDocument&nbsp;xd=new&nbsp;XmlDataDocument(); <br />
　　StringBuilder&nbsp;xmlString1; <br />
　　xmlNode1=serviceA.GetSiteAData(strSearch); <br />
　　if(xmlNode1==null)&nbsp;//--存储过程执行失败 <br />
　　return; <br />
　　xmlString1=new&nbsp;StringBuilder(xmlNode1.OuterXml); <br />
　　if(xmlString1.ToString().Equals("")) <br />
　　return&nbsp;; <br />
　　xd.LoadXml(xmlString1.ToString()); <br />
　　ds.ReadXml(new&nbsp;XmlNodeReader(xd)); <br />
　　DataGrid1.DataSource=ds.Tables["list"].DefaultView; <br />
　　DataGrid1.DataBind(); <br />
　　}</div>
<p>&nbsp;</p>
<p>　　此段代码给出了xml转化成dataset的解决方案,虽然这不是必须的,但毕竟在asp.net里,dataset占的作用之重,谁都知道的.其他的请 朋友们先看(呵呵,个中高手就免了),在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案,写了三篇了,发现似乎还是有些朋友看的,那我就献 丑继续写下去好了,大家有什么意见也希望提出,在下的理解存在偏驳也再所难免,希望谅解:)</p>
<p>　　接上篇文章,我们先简单说明下绑定函数.首先实例化ServiceA,这个和一般类的实例化并没有不同..接下来用xmlNode1来接受函数的返回值,接下来是构造xml,并将其转化为dataset,这是通用的方法,如果是刚接触不久的朋友,最好能记下这种方法.</p>
<p>　　接下来给出异步调用两个服务的代码</p>
<p>&nbsp;</p>
<div class="code">　　//绑定数据 <br />
　　public&nbsp;void&nbsp;BindData() <br />
　　{ <br />
　　IAsyncResult&nbsp;ar1; <br />
　　IAsyncResult&nbsp;ar2; <br />
　　serviceA=new&nbsp;SiteA.Service1(); <br />
　　serviceB=new&nbsp;SiteB.Service1(); <br />
　　DataSet&nbsp;ds=new&nbsp;DataSet(); <br />
　　XmlNode&nbsp;xmlNode1,xmlNode2; <br />
　　XmlDataDocument&nbsp;xd=new&nbsp;XmlDataDocument(); <br />
　　StringBuilder&nbsp;xmlString1,xmlString2; <br />
　　//--简单的异步调用 <br />
　　ar1=serviceA.BeginGetSiteAData(strSearch,null,null); <br />
　　ar2=serviceB.BeginGetSiteAData(strSearch,null,null); <br />
　　xmlNode1=serviceA.EndGetSiteAData(ar1); <br />
　　xmlNode2=serviceB.EndGetSiteAData(ar2); <br />
　　//---------- <br />
　　if(xmlNode1==null&amp;&amp;xmlNode2==null)&nbsp;//--存储过程执行失败 <br />
　　return; <br />
　　xmlString1=new&nbsp;StringBuilder(xmlNode1.OuterXml); <br />
　　xmlString2=new&nbsp;StringBuilder(xmlNode2.OuterXml); <br />
　　xmlString1=MakeNewXmlString(xmlString1,xmlString2);&nbsp;//生成新的xml <br />
　　if(xmlString1.ToString().Equals("")) <br />
　　return&nbsp;; <br />
　　xd.LoadXml(xmlString1.ToString()); <br />
　　ds.ReadXml(new&nbsp;XmlNodeReader(xd)); <br />
　　DataGrid1.DataSource=ds.Tables["list"].DefaultView; <br />
　　DataGrid1.DataBind(); <br />
　　} <br />
　　//生成新XML <br />
　　public&nbsp;StringBuilder&nbsp;MakeNewXmlString(StringBuilder&nbsp;str1,StringBuilder&nbsp;str2) <br />
　　{ <br />
　　str1=str1.Replace("",""); <br />
　　str2=str2.Replace("",""); <br />
　　str1.Append(str2.ToString()); <br />
　　return&nbsp;str1; <br />
　　}</div>
<p>&nbsp;</p>
<p>　　这有两个需要注意的地方,一个是xml构造,还有就是异步调用的实现,请读者,自己理解</p>
<p>　　下面讲下通过dll来引用webservice的方法,我只把流程介绍下.</p>
<p>　　首先,在ie输入服务的地址,如:http://www.xxx.com/service.asmx</p>
<p>　　然后写输入http://www.xxx.com/service.asmx?wsdl</p>
<p>　　打开后,另存为xxx.wsdl</p>
<p>　　然后用vs的命令提示符来编译:wsdl /namespace:SiteA ServiceA.wsdl</p>
<p>　　生成名字空间为sitea的代理类</p>
<p>　　最后csc /out:ServiceA.dll /t:library Service1.cs ,其中service1.cs为代理类文件</p>
<p>　　最后引用dll就可以了.</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:23 <a href="http://www.blogjava.net/table/articles/234087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript代码混淆综合解决方案</title><link>http://www.blogjava.net/table/articles/234086.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:20:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234086.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234086.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234086.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">Javascript 代码混淆的目的
<p>Javascript 是一种解释执行的脚本语言，主要应用于 Web 领域的客户端的浏览器中；由于 Javascript 解释执行的特性，代码必须明文下载到客户端，并且可以很容易的进行调试，使得 Javascript 代码的保护非常困难；</p>
<p>不同的人对 Javascript 代码的保护有不同的看法；有的人辛苦努力的代码，却可以被竞争对手轻易获得，他们就非常希望能有保护 Javascript 代码的方案，但现有的方案可能无法满足他们的要求；很多人认为 Javascript 语言很简单，Javascript 代码没有保护的价值，可能是他们的代码确实简单，或者他们并不了解 Javascript 语言强大的功能；还有的人认为现在都开源了，还保护代码干什么，当然开源的人是值得敬佩的，但对别人的代码的开源要求，却不是合理的。</p>
<p>为了提高用户的体验，出现了 Web 2.0 技术，并随着 AJAX 和富界面技术的发展，Javascript 在 Web 应用上的重要性越来越高，Javascript 代码的复杂性、功能和技术含量也越来越高，对Javascript 代码保护的需要也越来越迫切。</p>
<p>Javascript 在线混淆器的目的是为 Javascript 代码保护的需求，提供一种全新的综合解决方案，包括编码规则和免费的在线混淆器。</p>
<p>&nbsp;</p>
<p>混淆和加密的区别</p>
<p>很多人将这两者混在一起讨论，实际上两者的目的有一定的区别，采取的手段也有很大的不同。加密主要是为了防止未经授权的使用，对这种情况即使破解了加密，也只能非法使用，并不一定能获得软件的代码逻辑；但对于脚本来说，防止对代码进行访问的措施，也属于加密，对这种情况，破解了加密，就获得了代码；而混淆是在无法阻止他人获取代码的情况下，采取的保护代码的逻辑不被他人理解的措施；对于混淆的代码，他人很难理解，无法进行修改和重新应用；<br />
对于生成机器码的语言，比如 C 语言，只需要考虑未经授权的访问，几乎不需考虑代码的保护；因为对编译后的软件，只能反汇编为汇编语言代码，几乎无法分析出代码的逻辑。<br />
对于生成中间代码的语言，比如 Java 和 C#，即需要考虑未经授权的访问，又需考虑代码的保护；；因为对编译后的软件，可以很容易的反编译为较高级的语言，从而了解到代码中的逻辑，并较容易的破解加密。而混淆后，即难于理解代码的逻辑，也不易找到加密点所在。<br />
对于脚本语言，比如 Javascript，只能混淆，难以加密；因为脚本都是明文存在的，很容易调试的，通过跟踪可以较容易的破解上面两种目的的加密。但是混淆后的代码是难于理解代码的逻辑的。</p>
<p>我们只涉及到对 Javascript 脚本进行混淆，而不涉及加密；对于涉及到 Javascript 的系统的加密，我们建议不要将加密点放在 Javascript 脚本内，而是放在服务端的编译程序内，因为编译程序的加密可以采用更多的保护方式，加密的强度也更高。 </p>
<p>我们首先要分析 Javascript 语言和混淆相关的特点，和现有的混淆产品的不足，然后再提出我们对 Javascript 代码混淆的解决方案，最后是我们的 Javascript 在线混淆器。</p>
<p><br />
Javascript 语言和混淆相关的特性</p>
<p>Javascript 是一种解释执行的脚本语言，相对编译类型的语言有很多自身的特性，而其中一些特性会对代码混淆带来很大的困难。</p>
<p>无法定义类的属性和方法的名称是否需要被混淆</p>
<p>Javascript 是一种基于原型的语言，没有严格的类型定义。在自定义的类中，对于需要外部访问的属性和方法，不能进行混淆；对于内部访问的属性和方法，需要进行混淆；但Javascript 语言本身，无法对属性和方法进行这样的区分。为此我们要寻找一种变通的机制来识别属性和方法的名称是否需要混淆。</p>
<p>存在大量的系统定义的核心的和客户端的方法和属性不能被混淆</p>
<p>Javascript 语言本身定义了大量的核心的类、方法和属性；浏览器中也定义了大量的客户端的类、方法和属性；这些类、方法和属性都不能够被混淆，然而这些类、方法和属性的数量太大，无法通过枚举来避免混淆；为此我们需要寻找一种方法来标识这些类、属性和方法。</p>
<p>无法定义全局变量是否需要被混淆</p>
<p>全局变量是 window 对象的属性，局部变量是函数对象的属性；所有的局部变量都是可以和应该被混淆的，而全局变量有的需要混淆，有的不能混淆；但全局变量和局部变量的表现形式是一样的，难以区分；而且全局变量本身更无法定义是否需要被混淆。为此我们要找到一种方法来区分不能混淆的全局变量，和需要混淆的全局变量及局部变量。</p>
<p>Javascript 语言的这些特点，都对代码的混淆带来了很大的困难，如果不解决这几个问题，Javascript 代码的混淆就缺少实用的价值。</p>
<p>&nbsp;</p>
<p>现有 Javascript 混淆产品的问题</p>
<p>当我们需要混淆 Javascipt 代码的时候，首先考察了市面上现有的产品，和一些论坛里对混淆的思路，但这些产品和思路都不能满足我们的要求。</p>
<p>有一个商品化的 Javascript 混淆产品，采用了和一种 C# 混淆工具相似的混淆方式，分析了代码里所有的标识符，对一些系统预设的标识符不混淆，对其他的进行混淆，同时提供用户对标识符的混淆进行选择和配置；这个产品的功能很多很复杂，但有一个很大的问题，就是预设的标识符有限，对于代码中用到的大量的系统定义的属性和方法，会进行混淆，为此需要自己手工配置，避免对这些属性和方法的混淆，这对于大型的系统几乎是一个不可能完成的任务。</p>
<p>有一些论坛里也讨论到混淆的思路，包括一些示例，这些思路更多的是改变标识符的表现形式，有的是用编码字符串的关联数组替换属性，比如将 xx.dd 替换为 xx["\x64\x64"]；更复杂的是把 "\x64\x64" 之类保存到字符串数组，然后调用字符串数组作为关联数组的下标；这种思路可以避免上面的问题，但有一个更大的问题，就是混淆是可逆的，被混淆的标识符仅仅是被转换成了16进制的形式，可以很容易的恢复。</p>
<p>正是现有产品的不足，促使我们不得不研究自己的解决方案。我们的解决方案也是经过了几个版本，一开始的版本要复杂的多，花费了很大的工作量，但结果并不理想；几经修改才找到现有的解决方案；虽然开始的大量工作，最后几乎都废弃了，但没有前面的工作，也就没有后面的结果；所以即使您可能会认为我们的方案简单，那也只是我们努力的结果，而不是过程；而且简单的东西，往往是有效的。</p>
<p><br />
Javascript 代码混淆综合解决方案</p>
<p>通过前面对 Javascript 的特性和相关混淆产品的分析，使我们认识到如果仅仅是在混淆器上下功夫是不够的；因为 Javascript 语言本身对混淆的功能有很大的限制，无法解决。为此我们设计了一个综合的解决方案，就是 Javascript 在线混淆器规则，只要是按照规则编写的 Javascipt 代码，都能使用 Javascript 在线混淆器混淆进行混淆。</p>
<p>Javascript 在线混淆器的规则并不复杂，但能够解决 Javascript 语言本身的特性和其他混淆产品遇到的问题。</p>
<p>规则一、所有用 window 约束的类、变量和函数都不混淆，其他的类、变量和函数都混淆。</p>
<p>全局的类、变量和函数本身都是 window 的属性，用不用 window 约束，从逻辑的角度是一样的。但我们可以借用 window 的约束来区分对全局的类、变量和函数是否需要进行混淆。</p>
<p>用 window 的约束必须是前后一致的，不但包括类、变量和函数的定义，也包括类、变量和函数的调用。</p>
<p>局部的类、变量和函数，因为没有 window 约束，所以都是混淆的。<br />
<table id="Table1" style="width: 650px; height: 70px" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td style="width: 98px" align="center">类型</td>
            <td style="width: 222px" align="center">混淆</td>
            <td align="center">不混淆</td>
        </tr>
        <tr>
            <td style="width: 98px">类定义</td>
            <td style="width: 222px">function <strong>Class1</strong>(){...}</td>
            <td><strong>window.Class1</strong> = function(){...}</td>
        </tr>
        <tr>
            <td style="width: 98px">函数定义</td>
            <td style="width: 222px">function M<strong>ethod1</strong>(){...}</td>
            <td><strong>window.Method1</strong> = function(){...}</td>
        </tr>
        <tr>
            <td style="width: 98px">变量定义</td>
            <td style="width: 222px">var <strong>Param1</strong> = 1;</td>
            <td><strong>window.Param1</strong> = 1;</td>
        </tr>
        <tr>
            <td style="width: 98px">生成类的实例</td>
            <td style="width: 222px">var object1 = new <strong>Class1</strong>();</td>
            <td>var object1 = new <strong>window.<strong>Class1</strong></strong>();</td>
        </tr>
        <tr>
            <td style="width: 98px">函数调用</td>
            <td style="width: 222px"><strong>Method1</strong>();</td>
            <td><strong>window.Method1</strong>()</td>
        </tr>
        <tr>
            <td style="width: 98px">变量引用</td>
            <td style="width: 222px">var newParam = <strong>Param1</strong>;</td>
            <td>var newParam = <strong>window.Param1</strong>;</td>
        </tr>
    </tbody>
</table>
</p>
<p>规则二、所有以小写字符开头的属性和方法都不混淆，以其他字母开头的属性和方法都混淆，用 window 约束的属性和方法应用规则一。</p>
<p>JavaScript 核心和客户端中有大量的系统定义的方法和属性不能被混淆，而这些方法和属性绝大多数都是以小写字母开始的，本规则保证了系统定义的方法和属性不被混淆。在 Javascript 客户端中仅有极少数的系统定义的以大写字符起始的方法和属性，对于这种情况，可以采用关联数组的方式避免被混淆，比如 object1["Method1"]()；此方法也适用于第三方控件中可能会有的以大写字符起始的方法和属性的情况。</p>
<p>此规则也使我们可以在自定义的类中标识方法和属性是否被混淆，对于需要外部调用不能混淆的方法和属性，采用小写字母起始，对于内部的方法和属性，采用其他字母起始。<br />
<table style="height: 146px" cellspacing="1" cellpadding="1" width="650" border="1">
    <tbody>
        <tr>
            <td style="width: 86px" align="center">类型</td>
            <td style="width: 234px" align="center">混淆</td>
            <td align="center">不混淆</td>
        </tr>
        <tr>
            <td style="width: 86px">类方法定义</td>
            <td style="width: 234px">Class1.<strong>Method1</strong> = function(){...}</td>
            <td>Class1.<strong>method1</strong> = function(){...}<br />
            Class1<strong>["Method1"]</strong> = function(){...} </td>
        </tr>
        <tr>
            <td style="width: 86px">对象方法定义</td>
            <td style="width: 234px">Class1.prototype.<strong>Method1</strong> = function(){...}</td>
            <td>Class1.prototype.<strong>method1</strong> = function(){...}<br />
            Class1.prototype<strong>["Method1"]</strong> = function(){...} </td>
        </tr>
        <tr>
            <td style="width: 86px">类属性定义</td>
            <td style="width: 234px">Class1.<strong>Prop1</strong> = 1;</td>
            <td>Class1.<strong>prop1</strong> = 1;<br />
            Class1["<strong>Prop1</strong>"] = 1;</td>
        </tr>
        <tr>
            <td style="width: 86px">对象属性定义</td>
            <td style="width: 234px">object1.<strong>Prop1</strong> = 1;</td>
            <td>object1.<strong>prop1</strong> = 1;<br />
            object1["<strong>Prop1</strong>"] = 1;</td>
        </tr>
        <tr>
            <td style="width: 86px">类方法调用</td>
            <td style="width: 234px">Class1.<strong>Method1</strong>();</td>
            <td>Class1.<strong>method1</strong> ();<br />
            Class1<strong>["Method1"]</strong>(); </td>
        </tr>
        <tr>
            <td style="width: 86px">对象方法调用</td>
            <td style="width: 234px">object1.<strong>Method1</strong>();</td>
            <td>object1.<strong>method1</strong> ();<br />
            object1<strong>["Method1"]</strong>(); </td>
        </tr>
    </tbody>
</table>
</p>
<p>Javascript 在线混淆器的核心规则就是以上两点，另外还有几点说明。</p>
<p>标识符的混淆采用 Hash 算法，不可逆</p>
<p>Hash 算法是不可逆的，所以不能根据混淆后的标识符，来直接推出混淆前的标识符；但 Hash 算法依赖于 .Net 系统的实现，大多数的时候，.Net 的 Hash 算法是不变的，就是同一个标识符的混淆结果是一样的；如果能够枚举足够多的标识符，仍然可能根据相同的混淆结果，知道混淆前的标识符。</p>
<p>如何调用混淆后的类、方法和属性</p>
<p>对于混淆代码的内部调用，只要采用相同的规则，要么都混淆，要么都不混淆，就能正确的调用。</p>
<p>对于混淆代码的外部调用，可以有两种方式，一种是不混淆，代码内部采用不混淆的规则，外部采用不混淆的可理解的标识符调用；另一种是混淆，代码内部采用混淆的规则，外部也采用混淆后的不可理解的标识符调用，但此方式依赖于 .Net Hash 算法的实现，在不同版本的 .Net 实现中的 Hash 算法有可能不同，以至混淆后的标识符不一致，从而导致重新混淆后，需要替换原来混淆的标识符。</p>
<p>为何有&#8220;清除空格，保留分号后的回车&#8221;的选项</p>
<p>Javascript 语法要求全局函数的结尾必须有分号或回车，如果遗漏了分号，而又清除了所有的回车，总是提示第一行缺少分号，无法定位错误所在；采用本选项可以有助于寻找缺少的分号的位置。</p>
<p>以下 Javascript 语言的保留字不混淆</p>
<p>break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, while, with</p>
<p>混淆器预定义了一些 window 的属性和方法</p>
<p>Javascript 核心类和函数是不能被混淆的，他们实质上都是 window 的属性和方法，按照规则应该用 window 约束，以避免被混淆；但对于 Object、Array、Date、ActiveXObject 等核心类，混淆器已经预定义不会混淆，不需要再用 window 约束。对于 alert 等 window 常用的方法和 document 等 window 常用的客户端属性，也有预定义。其他需要预定义的类和方法，我们会逐步添加；没有预定义的全局类和函数，如果不能混淆，必须用 window 约束。</p>
<p>以下全局的类、变量和方法不混淆</p>
<p>ActiveXObject, alert, Array, Boolean, Date , document, Math, Number, Object, RegExp, String, window</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:20 <a href="http://www.blogjava.net/table/articles/234086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript常用检测脚本实例代码</title><link>http://www.blogjava.net/table/articles/234085.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:17:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234085.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234085.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234085.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>/*</p>
<p>-------------------------------------------------------------------------------</p>
<p>文件名称：check.js</p>
<p>说明：JavaScript脚本，用于检查网页提交表单的输入数据</p>
<p>版本：1.0</p>
<p>*/</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：校验ip地址的格式</p>
<p>输入：strIP：ip地址</p>
<p>返回：如果通过验证返回true,否则返回false；</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isIP(strIP) { </p>
<p>if (isNull(strIP)) return false;</p>
<p>var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式</p>
<p>if(re.test(strIP))</p>
<p>{</p>
<p>if( RegExp.$1 &lt;256 &amp;&amp; RegExp.$2&lt;256 &amp;&amp; RegExp.$3&lt;256 &amp;&amp; RegExp.$4&lt;256) return true;</p>
<p>}</p>
<p>return false; </p>
<p>} </p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入字符串是否为空或者全部都是空格</p>
<p>输入：str</p>
<p>返回：</p>
<p>如果全是空返回true,否则返回false</p>
<p>*/</p>
<p>function isNull( str ){</p>
<p>if ( str == "" ) return true;</p>
<p>var regu = "^[ ]+$";</p>
<p>var re = new RegExp(regu);</p>
<p>return re.test(str);</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入对象的值是否符合整数格式</p>
<p>输入：str 输入的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isInteger( str ){&nbsp; </p>
<p>var regu = /^[-]{0,1}[0-9]{1,}$/;</p>
<p>return regu.test(str);</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入手机号码是否正确</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkMobile( s ){&nbsp;&nbsp; </p>
<p>var regu =/^[1][3][0-9]{9}$/;</p>
<p>var re = new RegExp(regu);</p>
<p>if (re.test(s)) {</p>
<p>return true;</p>
<p>}else{</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入字符串是否符合正整数格式</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isNumber( s ){&nbsp;&nbsp; </p>
<p>var regu = "^[0-9]+$";</p>
<p>var re = new RegExp(regu);</p>
<p>if (s.search(re) != -1) {</p>
<p>return true;</p>
<p>} else {</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入字符串是否是带小数的数字格式,可以是负数</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isDecimal( str ){&nbsp;&nbsp; </p>
<p>if(isInteger(str)) return true;</p>
<p>var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/;</p>
<p>if (re.test(str)) {</p>
<p>if(RegExp.$1==0&amp;&amp;RegExp.$2==0) return false;</p>
<p>return true;</p>
<p>} else {</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入对象的值是否符合端口号格式</p>
<p>输入：str 输入的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isPort( str ){&nbsp; </p>
<p>return (isNumber(str) &amp;&amp; str&lt;65536);</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入对象的值是否符合E-Mail格式</p>
<p>输入：str 输入的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isEmail( str ){&nbsp; </p>
<p>var myReg = /^[-_A-Za-z0-9]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; </p>
<p>if(myReg.test(str)) return true; </p>
<p>return false; </p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入字符串是否符合金额格式</p>
<p>格式定义为带小数的正数，小数点后最多三位</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isMoney( s ){&nbsp;&nbsp; </p>
<p>var regu = "^[0-9]+[\.][0-9]{0,3}$";</p>
<p>var re = new RegExp(regu);</p>
<p>if (re.test(s)) {</p>
<p>return true;</p>
<p>} else {</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>/*</p>
<p>用途：检查输入字符串是否只由英文字母和数字和下划线组成</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isNumberOr_Letter( s ){//判断是否是数字或字母</p>
<p>&nbsp;</p>
<p>var regu = "^[0-9a-zA-Z\_]+$";</p>
<p>var re = new RegExp(regu);</p>
<p>if (re.test(s)) {</p>
<p>return true;</p>
<p>}else{</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>/*</p>
<p>用途：检查输入字符串是否只由英文字母和数字组成</p>
<p>输入：</p>
<p>s：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isNumberOrLetter( s ){//判断是否是数字或字母</p>
<p>&nbsp;</p>
<p>var regu = "^[0-9a-zA-Z]+$";</p>
<p>var re = new RegExp(regu);</p>
<p>if (re.test(s)) {</p>
<p>return true;</p>
<p>}else{</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>/*</p>
<p>用途：检查输入字符串是否只由汉字、字母、数字组成</p>
<p>输入：</p>
<p>value：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isChinaOrNumbOrLett( s ){//判断是否是汉字、字母、数字组成</p>
<p>&nbsp;</p>
<p>var regu = "^[0-9a-zA-Z\u4e00-\u9fa5]+$";&nbsp;&nbsp; </p>
<p>var re = new RegExp(regu);</p>
<p>if (re.test(s)) {</p>
<p>return true;</p>
<p>}else{</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：判断是否是日期</p>
<p>输入：date：日期；fmt：日期格式</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>*/</p>
<p>function isDate( date, fmt ) {</p>
<p>if (fmt==null) fmt="yyyyMMdd";</p>
<p>var yIndex = fmt.indexOf("yyyy");</p>
<p>if(yIndex==-1) return false;</p>
<p>var year = date.substring(yIndex,yIndex+4);</p>
<p>var mIndex = fmt.indexOf("MM");</p>
<p>if(mIndex==-1) return false;</p>
<p>var month = date.substring(mIndex,mIndex+2);</p>
<p>var dIndex = fmt.indexOf("dd");</p>
<p>if(dIndex==-1) return false;</p>
<p>var day = date.substring(dIndex,dIndex+2);</p>
<p>if(!isNumber(year)||year&gt;"2100" || year&lt; "1900") return false;</p>
<p>if(!isNumber(month)||month&gt;"12" || month&lt; "01") return false;</p>
<p>if(day&gt;getMaxDay(year,month) || day&lt; "01") return false;</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function getMaxDay(year,month) {</p>
<p>if(month==4||month==6||month==9||month==11)</p>
<p>return "30";</p>
<p>if(month==2)</p>
<p>if(year%4==0&amp;&amp;year%100!=0 || year%400==0)</p>
<p>return "29";</p>
<p>else</p>
<p>return "28";</p>
<p>return "31";</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：字符1是否以字符串2结束</p>
<p>输入：str1：字符串；str2：被包含的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isLastMatch(str1,str2)</p>
<p>{&nbsp; </p>
<p>var index = str1.lastIndexOf(str2);</p>
<p>if(str1.length==index+str2.length) return true;</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：字符1是否以字符串2开始</p>
<p>输入：str1：字符串；str2：被包含的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isFirstMatch(str1,str2)</p>
<p>{&nbsp; </p>
<p>var index = str1.indexOf(str2);</p>
<p>if(index==0) return true;</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：字符1是包含字符串2</p>
<p>输入：str1：字符串；str2：被包含的字符串</p>
<p>返回：如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function isMatch(str1,str2)</p>
<p>{&nbsp; </p>
<p>var index = str1.indexOf(str2);</p>
<p>if(index==-1) return false;</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入的起止日期是否正确，规则为两个日期的格式正确，</p>
<p>且结束如期&gt;=起始日期</p>
<p>输入：</p>
<p>startDate：起始日期，字符串</p>
<p>endDate：结束如期，字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkTwoDate( startDate,endDate ) {</p>
<p>if( !isDate(startDate) ) {</p>
<p>alert("起始日期不正确!");</p>
<p>return false;</p>
<p>} else if( !isDate(endDate) ) {</p>
<p>alert("终止日期不正确!");</p>
<p>return false;</p>
<p>} else if( startDate &gt; endDate ) {</p>
<p>alert("起始日期不能大于终止日期!");</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入的Email信箱格式是否正确</p>
<p>输入：</p>
<p>strEmail：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkEmail(strEmail) { </p>
<p>//var emailReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/; </p>
<p>var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;</p>
<p>if( emailReg.test(strEmail) ){</p>
<p>return true; </p>
<p>}else{</p>
<p>alert("您输入的Email地址格式不正确！");</p>
<p>return false; </p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入的电话号码格式是否正确</p>
<p>输入：</p>
<p>strPhone：字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkPhone( strPhone ) { </p>
<p>var phoneRegWithArea = /^[0][1-9]{2,3}-[0-9]{5,10}$/; </p>
<p>var phoneRegNoArea = /^[1-9]{1}[0-9]{5,8}$/; </p>
<p>var prompt = "您输入的电话号码不正确!"</p>
<p>if( strPhone.length &gt; 9 ) {</p>
<p>if( phoneRegWithArea.test(strPhone) ){</p>
<p>return true; </p>
<p>}else{</p>
<p>alert( prompt );</p>
<p>return false; </p>
<p>}</p>
<p>}else{</p>
<p>if( phoneRegNoArea.test( strPhone ) ){</p>
<p>return true; </p>
<p>}else{</p>
<p>alert( prompt );</p>
<p>return false; </p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查复选框被选中的数目</p>
<p>输入：</p>
<p>checkboxID：字符串</p>
<p>返回：</p>
<p>返回该复选框中被选中的数目</p>
<p>&nbsp;</p>
<p>*/</p>
<p>&nbsp;</p>
<p>function checkSelect( checkboxID ) {</p>
<p>var check = 0;</p>
<p>var i=0;</p>
<p>if( document.all(checkboxID).length &gt; 0 ) { </p>
<p>for(&nbsp; i=0; i&lt;document.all(checkboxID).length; i++ ) {</p>
<p>if( document.all(checkboxID).item( i ).checked&nbsp; ) {</p>
<p>check += 1;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>}else{</p>
<p>if( document.all(checkboxID).checked )</p>
<p>check = 1;</p>
<p>}</p>
<p>return check;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function getTotalBytes(varField) {</p>
<p>if(varField == null)</p>
<p>return -1;</p>
<p>&nbsp;</p>
<p>var totalCount = 0;</p>
<p>for (i = 0; i&lt; varField.value.length; i++) {</p>
<p>if (varField.value.charCodeAt(i) &gt; 127) </p>
<p>totalCount += 2;</p>
<p>else</p>
<p>totalCount++ ;</p>
<p>}</p>
<p>return totalCount;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function getFirstSelectedValue( checkboxID ){</p>
<p>var value = null;</p>
<p>var i=0;</p>
<p>if( document.all(checkboxID).length &gt; 0 ){ </p>
<p>for(&nbsp; i=0; i&lt;document.all(checkboxID).length; i++ ){</p>
<p>if( document.all(checkboxID).item( i ).checked ){</p>
<p>value = document.all(checkboxID).item(i).value;</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>} else {</p>
<p>if( document.all(checkboxID).checked )</p>
<p>value = document.all(checkboxID).value;</p>
<p>}</p>
<p>return value;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>function getFirstSelectedIndex( checkboxID ){</p>
<p>var value = -2;</p>
<p>var i=0;</p>
<p>if( document.all(checkboxID).length &gt; 0 ){ </p>
<p>for(&nbsp; i=0; i&lt;document.all(checkboxID).length; i++ ) {</p>
<p>if( document.all(checkboxID).item( i ).checked&nbsp; ) {</p>
<p>value = i;</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>} else {</p>
<p>if( document.all(checkboxID).checked )</p>
<p>value = -1;</p>
<p>}</p>
<p>return value;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function selectAll( checkboxID,status ){</p>
<p>&nbsp;</p>
<p>if( document.all(checkboxID) == null)</p>
<p>return;</p>
<p>&nbsp;</p>
<p>if( document.all(checkboxID).length &gt; 0 ){ </p>
<p>for(&nbsp; i=0; i&lt;document.all(checkboxID).length; i++ ){</p>
<p>&nbsp;</p>
<p>document.all(checkboxID).item( i ).checked = status;</p>
<p>}</p>
<p>} else {</p>
<p>document.all(checkboxID).checked = status;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>function selectInverse( checkboxID ) {</p>
<p>if( document.all(checkboxID) == null)</p>
<p>return;</p>
<p>&nbsp;</p>
<p>if( document.all(checkboxID).length &gt; 0 ) { </p>
<p>for(&nbsp; i=0; i&lt;document.all(checkboxID).length; i++ ) {</p>
<p>document.all(checkboxID).item( i ).checked = !document.all(checkboxID).item( i ).checked;</p>
<p>}</p>
<p>} else {</p>
<p>document.all(checkboxID).checked = !document.all(checkboxID).checked;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>function checkDate( value ) {</p>
<p>if(value=='') return true;</p>
<p>if(value.length!=8 || !isNumber(value)) return false;&nbsp; </p>
<p>var year = value.substring(0,4);</p>
<p>if(year&gt;"2100" || year&lt; "1900")</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>var month = value.substring(4,6);</p>
<p>if(month&gt;"12" || month&lt; "01") return false;</p>
<p>&nbsp;</p>
<p>var day = value.substring(6,8);</p>
<p>if(day&gt;getMaxDay(year,month) || day&lt; "01") return false;</p>
<p>&nbsp;</p>
<p>return true;&nbsp; </p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查输入的起止日期是否正确，规则为两个日期的格式正确或都为空</p>
<p>且结束日期&gt;=起始日期</p>
<p>输入：</p>
<p>startDate：起始日期，字符串</p>
<p>endDate：&nbsp; 结束日期，字符串</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkPeriod( startDate,endDate ) {</p>
<p>if( !checkDate(startDate) ) {</p>
<p>alert("起始日期不正确!");</p>
<p>return false;</p>
<p>} else if( !checkDate(endDate) ) {</p>
<p>alert("终止日期不正确!");</p>
<p>return false;</p>
<p>} else if( startDate &gt; endDate ) {</p>
<p>alert("起始日期不能大于终止日期!");</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>用途：检查证券代码是否正确</p>
<p>输入：</p>
<p>secCode:证券代码</p>
<p>返回：</p>
<p>如果通过验证返回true,否则返回false</p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkSecCode( secCode ) {</p>
<p>if( secCode.length !=6 ){</p>
<p>alert("证券代码长度应该为6位");</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>if(!isNumber( secCode ) ){</p>
<p>alert("证券代码只能包含数字");</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/****************************************************</p>
<p>function:cTrim(sInputString,iType)</p>
<p>description:字符串去空格的函数</p>
<p>parameters:iType：1=去掉字符串左边的空格</p>
<p>&nbsp;</p>
<p>2=去掉字符串左边的空格</p>
<p>0=去掉字符串左边和右边的空格</p>
<p>return value:去掉空格的字符串</p>
<p>****************************************************/</p>
<p>function cTrim(sInputString,iType)</p>
<p>{</p>
<p>var sTmpStr = ' ';</p>
<p>var i = -1;</p>
<p>&nbsp;</p>
<p>if(iType == 0 || iType == 1)</p>
<p>{</p>
<p>while(sTmpStr == ' ')</p>
<p>{</p>
<p>++i;</p>
<p>sTmpStr = sInputString.substr(i,1);</p>
<p>}</p>
<p>sInputString = sInputString.substring(i);</p>
<p>}</p>
<p>&nbsp;</p>
<p>if(iType == 0 || iType == 2)</p>
<p>{</p>
<p>sTmpStr = ' ';</p>
<p>i = sInputString.length;</p>
<p>while(sTmpStr == ' ')</p>
<p>{</p>
<p>--i;</p>
<p>sTmpStr = sInputString.substr(i,1);</p>
<p>}</p>
<p>sInputString = sInputString.substring(0,i+1);</p>
<p>}</p>
<p>return sInputString;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>-------------------------------------------------------------------------------</p>
<p>说明：JavaScript脚本，验证表单中的数据项&nbsp; begin</p>
<p>------------------------------------------------------------------------------- </p>
<p>&nbsp;</p>
<p>*/</p>
<p>function checkForm(objFrm){</p>
<p>var len = 0;</p>
<p>len = objFrm.elements.length;</p>
<p>&nbsp;</p>
<p>var i = 0;</p>
<p>var objCheck;</p>
<p>//文本框</p>
<p>for(i = 0; i &lt; len; i ++){</p>
<p>objCheck = objFrm.elements[i];</p>
<p>if(objCheck.type =="text" &amp;&amp; !f_checkTextValid(objCheck) ){</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>}</p>
<p>//下拉框</p>
<p>for(i = 0; i &lt; len; i ++){</p>
<p>objCheck = objFrm.elements[i];</p>
<p>if(objCheck.type =="select-one" &amp;&amp; !f_checkSelectValid(objCheck) ){</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>}</p>
<p>//时间段有效</p>
<p>if( f_checkStartAndEndDate(objFrm) == false) return false;</p>
<p>&nbsp;</p>
<p>return true;</p>
<p>}</p>
<p>function f_checkSelectValid(obj){</p>
<p>//alert("check select");</p>
<p>if(obj.options.length &lt;= 0){</p>
<p>alert("下拉选框无数据!");</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>} </p>
<p>return true;</p>
<p>}</p>
<p>function f_checkStartAndEndDate(frm){</p>
<p>var len = frm.elements.length;</p>
<p>if(len == null &amp;&amp; len == 0) return true;</p>
<p>var i=0;</p>
<p>var temp;</p>
<p>var objCheck;</p>
<p>var objStartDate;</p>
<p>var objEndDate;</p>
<p>//alert("start date period check");</p>
<p>try{</p>
<p>for(i=0; i&lt; len ; i++){</p>
<p>objCheck = frm.elements[i];</p>
<p>temp = objCheck.name;</p>
<p>if( temp.indexOf("startDate") &gt;0 ||temp.indexOf("beginDate")&gt;0 )</p>
<p>objStartDate = objCheck;</p>
<p>if( temp.indexOf("endDate") &gt; 0 )</p>
<p>objEndDate = objCheck;</p>
<p>&nbsp;</p>
<p>}</p>
<p>//alert(objStartDate.value);</p>
<p>//alert(objEndDate.value);</p>
<p>if(objStartDate.value==null || objStartDate.value =="" || objStartDate.value ==null || objStartDate.value ==""){</p>
<p>return true;</p>
<p>}</p>
<p>return checkTwoDate(objStartDate.value, objEndDate.value);</p>
<p>&nbsp;</p>
<p>//alert("end date period check");</p>
<p>}catch(E){}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_checkTextValid(obj){</p>
<p>//不能为空</p>
<p>if(obj.getAttribute("isNeed") != null){</p>
<p>if(f_isNotNull(obj) == false) return false;</p>
<p>}</p>
<p>//不能超过长度</p>
<p>if(obj.getAttribute("maxlength") != null){</p>
<p>if(f_checkLength(obj) == false) return false;</p>
<p>}</p>
<p>var checkType ="";</p>
<p>checkType = obj.getAttribute("checkType");</p>
<p>if(checkType==null||checkType=="") return true;</p>
<p>//</p>
<p>if (checkType.indexOf("number") &gt;=0){</p>
<p>if(f_isNumber(obj) == false)&nbsp; return false;</p>
<p>if(f_checkNumType(obj,checkType) == false)&nbsp; return false;</p>
<p>&nbsp;</p>
<p>}</p>
<p>//</p>
<p>if (checkType.indexOf("positive") &gt;=0){</p>
<p>if(f_isNumber(obj) == false)&nbsp; return false;</p>
<p>if(f_isPositive(obj)==false)&nbsp; return false;</p>
<p>if(f_checkNumType(obj,checkType) == false)&nbsp; return false;</p>
<p>&nbsp;</p>
<p>}</p>
<p>if (checkType.indexOf("date") &gt;=0){</p>
<p>if(f_checkDate(obj) == false) return false;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>switch(checkType){</p>
<p>case "number": if(f_isNumber(obj) == false) return false;break;</p>
<p>case "date": if(f_checkDate(obj) == false) return false;break;</p>
<p>default:</p>
<p>}</p>
<p>*/</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_isNotNull(obj){</p>
<p>if(obj.value == ""){</p>
<p>f_alert(obj, " 不允许为空值！");</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_isNumber(obj){</p>
<p>if(isNaN(obj.value)){</p>
<p>f_alert(obj," 应为数值类型");</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>return true;</p>
<p>&nbsp;</p>
<p>}</p>
<p>function f_checkDate(obj) {</p>
<p>if(checkDate(obj.value) ==false){</p>
<p>f_alert(obj," 不是合法日期格式！");</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_checkLength(obj){</p>
<p>if(getTotalBytes(obj) &gt; Math.abs( obj.getAttribute("maxlength") ) ){</p>
<p>f_alert(obj," 超出长度限制!");</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>return true;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function&nbsp; f_alert(obj,alertStr){</p>
<p>var fielName = obj.getAttribute("fieldName");</p>
<p>if(fielName == null)</p>
<p>fielName = "";</p>
<p>alert(fielName + "\n" +alertStr);</p>
<p>obj.select();</p>
<p>obj.focus();</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_checkNumType(obj, numType){</p>
<p>//假设: 已经进行数字类型判断</p>
<p>&nbsp;</p>
<p>var strTemp;</p>
<p>var numpric;</p>
<p>var numLen;</p>
<p>var strArr;</p>
<p>var defaultLen = 19;</p>
<p>var defaultpric = 5;</p>
<p>&nbsp;</p>
<p>try{</p>
<p>if(numType == null|| numType =="") return f_checkNumLenPrec(obj,defaultLen, defaultpric);</p>
<p>if(numType.indexOf("(") &lt; 0 || numType.indexOf(")") &lt; 0 ) return f_checkNumLenPrec(obj,defaultLen, defaultpric);</p>
<p>strTemp = numType.substr( numType.indexOf("(") + 1 ,numType.indexOf(")") - numType.indexOf("(") -1 );</p>
<p>if(strTemp == null||strTemp =="") return f_checkNumLenPrec(obj,defaultLen, defaultpric);</p>
<p>strArr = strTemp.split(",");</p>
<p>&nbsp;</p>
<p>numLen = Math.abs( strArr[0] ); </p>
<p>numpric = Math.abs( strArr[1] );</p>
<p>&nbsp;</p>
<p>return f_checkNumLenPrec(obj,numLen, numpric);</p>
<p>}catch(e){</p>
<p>alert("in f_checkNumType = " + e);</p>
<p>return f_checkNumLenPrec(obj,defaultLen, defaultpric);</p>
<p>}</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_checkNumLenPrec(obj, len, pric){</p>
<p>var numReg;</p>
<p>var value = obj.value;</p>
<p>var strValueTemp, strInt, strDec;</p>
<p>&nbsp;</p>
<p>//alert(value + "=====" + len + "====="+ pric);</p>
<p>try{</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>numReg =/[\-]/;</p>
<p>strValueTemp = value.replace(numReg, "");</p>
<p>strValueTemp = strValueTemp.replace(numReg, "");</p>
<p>//整数</p>
<p>if(pric==0){</p>
<p>numReg =/[\.]/;</p>
<p>//alert(numReg.test(value));</p>
<p>if(numReg.test(value) == true){</p>
<p>f_alert(obj, "输入必须为整数类型!");</p>
<p>return false;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>if(strValueTemp.indexOf(".") &lt; 0 ){</p>
<p>//alert("lennth==" + strValueTemp);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>if(strValueTemp.length &gt;( len - pric)){</p>
<p>f_alert(obj, "整数位不能超过"+ (len - pric) +"位");</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>}else{</p>
<p>strInt = strValueTemp.substr( 0, strValueTemp.indexOf(".") );</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>//alert("lennth==" + strInt);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>if(strInt.length &gt;( len - pric)){</p>
<p>f_alert(obj, "整数位不能超过"+ (len - pric) +"位");</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>strDec = strValueTemp.substr( (strValueTemp.indexOf(".")+1), strValueTemp.length );</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>//alert("pric==" + strDec);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>if(strDec.length &gt; pric){</p>
<p>f_alert(obj, "小数位不能超过"+&nbsp; pric +"位");</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>return true;</p>
<p>}catch(e){</p>
<p>alert("in f_checkNumLenPrec = " + e);</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function f_isPositive(obj){</p>
<p>var numReg =/[\-]/;</p>
<p>if(numReg.test(obj.value) == true){</p>
<p>f_alert(obj, "必须为正数!");</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/*</p>
<p>function selectedCheckboxCount(form)</p>
<p>功能说明：对Form中选中的可选项计数</p>
<p>&nbsp;</p>
<p>参数说明：</p>
<p>form:指定的表单</p>
<p>*/</p>
<p>function selectedCheckboxCount(form){</p>
<p>var length =0;</p>
<p>var i=0;</p>
<p>var count =0;</p>
<p>eles = form.elements;</p>
<p>while(i&lt;eles.length){</p>
<p>obj= eles.item(i);</p>
<p>//type = obj.attributes.item("type").nodeValue;</p>
<p>&nbsp;</p>
<p>type = obj.type;</p>
<p>if(type == "checkbox"){</p>
<p>if(obj.checked){</p>
<p>count++;</p>
<p>}</p>
<p>}</p>
<p>i++;</p>
<p>}</p>
<p>return count;</p>
<p>}</p>
<p>&nbsp;</p>
<p>//得到字节长度</p>
<p>function getByteLen(str)</p>
<p>{</p>
<p>var l = str.length;</p>
<p>var n = l;</p>
<p>for ( var i=0; i&lt;l; i++ )</p>
<p>&nbsp;</p>
<p>if ( str.charCodeAt(i) &lt;0 || str.charCodeAt(i) &gt;255 )</p>
<p>n=n+1;</p>
<p>return n</p>
<p>}</p>
<p>&nbsp;</p>
<p>/*</p>
<p>说明：</p>
<p>1.清除表格中的数据(0.0 和 0)</p>
<p>2.如果cell中没有数据，则自动加上一个空格</p>
<p>3.清除空白行的checkbox</p>
<p>&nbsp;</p>
<p>参数：</p>
<p>clearzero:是否清除"0"、"0.0"，false不清除、true清除（默认为true）</p>
<p>tablename:要清除的表格名字，默认为sortTable</p>
<p>*/</p>
<p>function clear_table(clearzero,tablename)</p>
<p>{</p>
<p>var tobject;</p>
<p>if(tablename==null)</p>
<p>tobject=gmobj("sortTable");</p>
<p>else</p>
<p>tobject=gmobj(tablename);</p>
<p>//如果table未定义，则不进行过滤</p>
<p>&nbsp;</p>
<p>if(tobject==null)</p>
<p>return;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>//如果函数调用参数为空，表示要清除0、0.0；反之，不要清除0、0.0。</p>
<p>var clear = (clearzero==null)?true:clearzero;</p>
<p>&nbsp;</p>
<p>//清除0、0.0，填补空格</p>
<p>var rows = tobject.rows;</p>
<p>var j=0;</p>
<p>for(var i=0;i&lt;rows.length;i++)</p>
<p>{</p>
<p>//取得第一个cell的属性clear，如果为1，表示该行没有数据，则清除该行所有数据</p>
<p>&nbsp;</p>
<p>while(tobject.rows[i].cells[j] != null)</p>
<p>{</p>
<p>if(clear)</p>
<p>{</p>
<p>if(tobject.rows[i].cells[j].innerHTML==0 ||tobject.rows[i].cells[j].innerHTML==0.0||tobject.rows[i].cells[j].innerHTML=="")</p>
<p>tobject.rows[i].cells[j].innerText=" ";</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>if (tobject.rows[i].cells[j].innerHTML=="")</p>
<p>tobject.rows[i].cells[j].innerText=" ";</p>
<p>}</p>
<p>j++;</p>
<p>}</p>
<p>j=0;</p>
<p>&nbsp;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>&nbsp;</p>
<p>function gmobj(mtxt)&nbsp; /* Get object by object name */</p>
<p>{</p>
<p>if (document.getElementById) {</p>
<p>m=document.getElementById(mtxt);</p>
<p>} else if (document.all) {</p>
<p>m=document.all[mtxt];</p>
<p>} else if (document.layers) {</p>
<p>m=document.layers[mtxt];</p>
<p>}</p>
<p>return m;</p>
<p>}</p>
<p>/*</p>
<p>-------------------------------------------------------------------------------</p>
<p>说明：JavaScript脚本，验证表单中的数据项&nbsp; end</p>
<p>------------------------------------------------------------------------------- <br />
*/ <br />
/*<br />
用途：检查输入字符串是否是带小数的数字格式,可以是负数(并且满足规定的精度)</p>
<p>输入：str：字符串<br />
l：总位数<br />
d：小数点后位数<br />
返回：<br />
如果通过验证返回true,否则返回false<br />
*/<br />
function isDecimal( str,l,d ){&nbsp;&nbsp; <br />
if(isInteger(str)) {<br />
if (l==null)&nbsp; return true;<br />
if (str&lt;0) l--;<br />
if (str.length&lt;=l) return true;<br />
}<br />
var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/;<br />
if (re.test(str)) {<br />
if (l==null)&nbsp; return true;<br />
if (d==null) d=0;<br />
if(RegExp.$1==0&amp;&amp;RegExp.$2==0) return false;<br />
if (RegExp.$1.length+RegExp.$2.length&lt;=l<br />
&amp;&amp; RegExp.$2.length&lt;=d)&nbsp; return true;<br />
}<br />
return false;<br />
}<br />
onclick="isNull('Co.PageForm.CompetitorName');"</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:17 <a href="http://www.blogjava.net/table/articles/234085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript用回车键实现Tab键功能</title><link>http://www.blogjava.net/table/articles/234081.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234081.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234081.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234081.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">很多罗嗦的客户，喜欢提出这些需求！其实实现也不难！代码如下：
<p>我前段时间看了MS的ASP.NET讲座,在里面谈到了如何让"回车键"使文本框的焦点一个个下移.其中提了三种方法,最好的一种是这样的:</p>
<p>&nbsp;用客户端脚本在页面添加document的onkeydown事件,让页面在接受到回车事件后,进行Tab键的功能,即只要把event的keyCode由13变为9</p>
<p>&nbsp;VBScript代码:</p>
<p>&nbsp;&lt;script language="vbscript"&gt;</p>
<p>&nbsp;sub document_onkeydown</p>
<p>&nbsp;&nbsp;&nbsp; if event.keyCode=13 then</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=9</p>
<p>&nbsp;&nbsp; end if</p>
<p>&nbsp;end sub</p>
<p>&lt;/script&gt;</p>
<p>Javascript代码如下:</p>
<p>&lt;script language="javascript" for="document" event="onkeydown"&gt;</p>
<p>&lt;!--</p>
<p>&nbsp; if(event.keyCode==13)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=9;</p>
<p>--&gt;</p>
<p>&lt;/script&gt;</p>
<p>这样的处理方式,可以实现焦点往下移动,但对于按钮也起同样的作用,一般的客户在输入完资料以后,跳到按钮后,最好能直接按"回车"进行数据的提交.因此,对上面的方法要进行一下修改,应该对于"提交"按钮不进行焦点转移.而直接激活提交.</p>
<p>&nbsp;</p>
<p>因此我对上面的代码进行了一个修改,即判断事件的"源",是否为提交按钮,代码如下:</p>
<p>&lt;script language="javascript" for="document" event="onkeydown"&gt;</p>
<p>&lt;!--</p>
<p>&nbsp; if(event.keyCode==13 &amp;&amp; event.srcElement.type!='button' &amp;&amp; event.srcElement.type!='submit' &amp;&amp; event.srcElement.type!='reset' &amp;&amp; event.srcElement.type!='textarea'&nbsp;&amp;&amp; event.srcElement.type!='')</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=9;</p>
<p>--&gt;</p>
<p>&lt;/script&gt;</p>
<p>判断是否为button, 是因为在HTML上会有type="button"</p>
<p>判断是否为submit,是因为HTML上会有type="submit"</p>
<p>判断是否为reset,是因为HTML上的"重置"应该要被执行</p>
<p>判断是否为空,是因为对于HTML上的"&lt;a&gt;链接"也应该被执行,这种情况发生的情况不多,可以使用"tabindex=-1"的方式来取消链接获得焦点.</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:10 <a href="http://www.blogjava.net/table/articles/234081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript判断数字的合法性</title><link>http://www.blogjava.net/table/articles/234079.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234079.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234079.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234079.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">//验证是否为数字<br />
&nbsp;&nbsp; function isNumber(oNum)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;if(!oNum) return false;<br />
&nbsp;&nbsp;var strP=/^\d+(\.\d+)?$/;<br />
&nbsp;&nbsp;if(!strP.test(oNum)) return false;<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;if(parseFloat(oNum)!=oNum) return false;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(ex)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp; }<br />
</div>
<img src ="http://www.blogjava.net/table/aggbug/234079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:08 <a href="http://www.blogjava.net/table/articles/234079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>防止代码复制</title><link>http://www.blogjava.net/table/articles/234076.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234076.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234076.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234076.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234076.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>//插入 document.body.oncopy event事件中<br />
//或者 &lt;body&gt;的"oncopy"属性<br />
function copyCode()<br />
{<br />
&nbsp;try<br />
&nbsp;{<br />
&nbsp;&nbsp;var range = document.selection.createRange();<br />
&nbsp;&nbsp;if (document.selection.type != "none")<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var parent = range.parentElement();<br />
&nbsp;&nbsp;&nbsp;var parentName = parent.tagName;<br />
&nbsp;&nbsp;&nbsp;if (parentName != null)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (parentName.toLowerCase() == "pre")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Replace superfluous &lt;br&gt; tags in a &lt;pre&gt; block.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var re = /&lt;br&gt;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var code = range.htmlText.replace(re, "\r\n");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Replace non-breaking spaces.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re = /&amp;nbsp;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code = code.replace(re, " ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Replace &amp; characters.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re = /&amp;amp;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code = code.replace(re, "&amp;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Replace &lt; characters.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re = /&amp;lt;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code = code.replace(re, "&lt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Replace &gt; characters.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re = /&amp;gt;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code = code.replace(re, "&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// CJM: Remove colorization<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re = /&lt;\/?span([^&gt;])*&gt;/gi;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code = code.replace(re, "");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (code != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnValue = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.clipboardData.setData("Text", code);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;catch(e) {}<br />
}<br />
</p>
<p>&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;防复制 &lt;/TITLE&gt;<br />
&lt;SCRIPT language=javascript src="/blog/js/oncopy.js"&gt;<br />
&lt;/SCRIPT&gt;</p>
<p>&lt;META NAME="Generator" CONTENT="EditPlus"&gt;<br />
&lt;META NAME="Author" CONTENT="feiyun"&gt;<br />
&lt;META NAME="Keywords" CONTENT="nocopy"&gt;<br />
&lt;META NAME="Description" CONTENT="no copy"&gt;<br />
&lt;/HEAD&gt;<br />
&lt;BODY&nbsp; oncopy="return copyCode();" &gt;<br />
&lt;FONT COLOR="#FF0000"&gt;防代码复制，不信你试试（只防止代码复制，其他可以复制）&lt;/FONT&gt;&lt;BR&gt;<br />
&lt;TABLE&gt;<br />
&lt;TR&gt;<br />
&nbsp;&lt;TD&gt;aa&lt;/TD&gt;<br />
&nbsp;&lt;TD&gt;bb&lt;/TD&gt;<br />
&nbsp;&lt;TD&gt;cc&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;TR&gt;<br />
&nbsp;&lt;TD&gt;dd&lt;/TD&gt;<br />
&nbsp;&lt;TD&gt;ee&lt;/TD&gt;<br />
&nbsp;&lt;TD&gt;ff&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;/TABLE&gt;</p>
<p>&lt;PRE lang=vbscript&gt;&amp;lt;%<br />
&lt;SPAN class=vb-statement&gt;option&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;explicit&lt;/SPAN&gt;<br />
&lt;SPAN class=vb-statement&gt;dim&lt;/SPAN&gt; fso<br />
&lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; fso = createobject(&lt;SPAN class=vb-string&gt;&amp;quot;scripting.filesystemobject&amp;quot;&lt;/SPAN&gt;)<br />
&lt;SPAN class=vb-statement&gt;dim&lt;/SPAN&gt; asplines, jslines, aspbytes, jsbytes, aspwords<br />
iterate(server.mappath(&lt;SPAN class=vb-string&gt;&amp;quot;/web_api&amp;quot;&lt;/SPAN&gt;))<br />
response.write &lt;SPAN class=vb-string&gt;&amp;quot;ASP:<br />
Total Lines Coded: &amp;quot;&lt;/SPAN&gt; &amp;amp; asplines &amp;amp; &lt;SPAN class=vb-string&gt;&amp;quot;<br />
Total Bytes: &amp;quot;&lt;/SPAN&gt; &amp;amp; aspbytes &amp;amp; &lt;SPAN class=vb-string&gt;&amp;quot;<br />
Total Individual Elements (words) Typed: &amp;quot;&lt;/SPAN&gt; &amp;amp; aspwords<br />
response.write &lt;SPAN class=vb-string&gt;&amp;quot;<br />
JScript:<br />
Total Lines Coded: &amp;quot;&lt;/SPAN&gt; &amp;amp; jslines &amp;amp; &lt;SPAN class=vb-string&gt;&amp;quot;<br />
&amp;quot;&lt;/SPAN&gt; &amp;amp; &lt;SPAN class=vb-string&gt;&amp;quot;Total Bytes: &amp;quot;&lt;/SPAN&gt; &amp;amp; jsbytes<br />
&lt;SPAN class=vb-statement&gt;function&lt;/SPAN&gt; iterate(path)<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;dim&lt;/SPAN&gt; folder, folders, files, file, ts, txt, arr, f<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; folder = fso.getfolder(path)<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; files = folder.files<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;dim&lt;/SPAN&gt; rx, c<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; rx = &lt;SPAN class=vb-keyword&gt;new&lt;/SPAN&gt; regexp<br />
&nbsp;&nbsp;&nbsp; rx.ignorecase = &lt;SPAN class=vb-keyword&gt;true&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp; rx.global = &lt;SPAN class=vb-keyword&gt;true&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp; rx.pattern = &lt;SPAN class=vb-string&gt;&amp;quot;&nbsp; +&amp;quot;&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;for&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;each&lt;/SPAN&gt; file in files<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;if&lt;/SPAN&gt; right(file.name,&lt;SPAN class=vb-literal&gt;4&lt;/SPAN&gt;)=&lt;SPAN class=vb-string&gt;&amp;quot;.asp&amp;quot;&lt;/SPAN&gt; &lt;SPAN class=vb-keyword&gt;or&lt;/SPAN&gt; right(file.name,&lt;SPAN class=vb-literal&gt;3&lt;/SPAN&gt;)=&lt;SPAN class=vb-string&gt;&amp;quot;.js&amp;quot;&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;then&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; ts = file.openastextstream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;if&lt;/SPAN&gt; ts.atendofstream &lt;SPAN class=vb-statement&gt;then&lt;/SPAN&gt; txt = &lt;SPAN class=vb-string&gt;&amp;quot;&amp;quot;&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;else&lt;/SPAN&gt; txt = ts.readall<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.close<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txt = rx.replace(txt,&lt;SPAN class=vb-string&gt;&amp;quot; &amp;quot;&lt;/SPAN&gt;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txt = replace(txt,vbcrlf&amp;amp;vbcrlf,vbcrlf)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr = split(replace(txt,vbcrlf,&lt;SPAN class=vb-string&gt;&amp;quot; &amp;quot;&lt;/SPAN&gt;),&lt;SPAN class=vb-string&gt;&amp;quot; &amp;quot;&lt;/SPAN&gt;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aspwords = aspwords + ubound(arr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr = split(txt,vbcrlf)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;if&lt;/SPAN&gt; right(file.name,&lt;SPAN class=vb-literal&gt;4&lt;/SPAN&gt;)=&lt;SPAN class=vb-string&gt;&amp;quot;.asp&amp;quot;&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;then&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asplines = asplines + ubound(arr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aspbytes = aspbytes + len(txt)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;else&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jslines = jslines + ubound(arr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsbytes = jsbytes + len(txt)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;end&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;if&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;end&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;if&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;next&lt;/SPAN&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;set&lt;/SPAN&gt; folders = folder.subfolders<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;for&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;each&lt;/SPAN&gt; f in folders<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iterate f.path<br />
&nbsp;&nbsp;&nbsp; &lt;SPAN class=vb-statement&gt;next&lt;/SPAN&gt;<br />
&lt;SPAN class=vb-statement&gt;end&lt;/SPAN&gt; &lt;SPAN class=vb-statement&gt;function&lt;/SPAN&gt;<br />
%&amp;gt;&lt;/PRE&gt;</p>
<p>&lt;/BODY&gt;<br />
&lt;/HTML&gt;</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:07 <a href="http://www.blogjava.net/table/articles/234076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JavaScript脚本将当地时间转换成其它时区</title><link>http://www.blogjava.net/table/articles/234072.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234072.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234072.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234072.html</trackback:ping><description><![CDATA[<p>毫无疑问，用JavaScript脚本可以通过直接查看用户的时钟，方便地在网页上显示本地时间。但是，如果你想显示不同地区的时间—--例如，如果你的本部在别的国家，你想查看&#8220;本国&#8221;时间而非当地时间，又该怎么办呢？</p>
<p>要做到这一点，必须进行各种时间计算才能将当地时间转换为目的时间。本文将解释如何进行这些计算。</p>
<p><strong>第一步：</strong></p>
<p>事情的第一步是获得当地时间。在JavaScript中，这无疑可以通过初始化一个<em>Data()</em>对象来轻松完成。</p>
<p>// create Date object for current location</p>
<p>d = new Date();</p>
<p>通过调用<em>Data()</em>对象的<em>getTime()</em>方法，即可显示1970年1月1日后到此当时时间之间的毫秒数。</p>
<p>// convert to msec since Jan 1 1970</p>
<p>localTime = d.getTime();</p>
<p><strong>第二步：</strong></p>
<p>下一步，通过<em>Data()</em>对象的<em>getTimezoneOffset()</em>方法来找出当地时间偏移值。在缺省情况下，此方法以分钟显示时区偏移值结果，因此在早先的计算中要将此值转换成毫秒。</p>
<p>// obtain local UTC offset and convert to msec</p>
<p>localOffset = d.getTimezoneOffset() * 60000;</p>
<p>注意，<em>getTimezoneOffset()</em>方法的负返回值表示当地时间在全球标准时间（UTC）之前，而正返回值则表示当地时间在全球标准时间（UTC）之后。</p>
<p><strong>注意</strong>：万一你想知道我是如何得到60000这个倍增因数的，记住1000毫秒等于一秒，而一分钟等于60秒。因此 ，将分钟转换成毫秒，要用60乘以1000等于60000。</p>
<p><strong>第三步</strong></p>
<p>将本地时间与本地时区偏移值相加得到当前国际标准时间（UTC）。</p>
<p>// obtain UTC time in msec</p>
<p>utc = localTime + localOffset;</p>
<p>这里，变量<em>utc</em>包含当前国际标准时间（UTC）。但是，此时间以1970年1月1日到现在所含有的毫秒数来表示。暂时让它这样表示，因为还要进行一些计算。</p>
<p><strong>第四步</strong></p>
<p>得到国际标准时间（UTC）后，再获得目标城市的国际标准时间（UTC）小时偏移值，把它转换成毫秒，再加上国际标准时间（UTC）。</p>
<p>// obtain and add destination's UTC time offset</p>
<p>// for example, Bombay</p>
<p>// which is UTC + 5.5 hours</p>
<p>offset = 5.5;</p>
<p>bombay = utc + (3600000*offset);</p>
<p><strong>注意</strong>：万一你想知道我是如何得到3600000这个倍增因数的，记住1000毫秒等于一秒，而一小时等于3600秒。因此 ，将小时转换成毫秒，要用3600乘以1000等于3600000。</p>
<p>此时，变量<em>bombay</em>包含印度孟买城的当地时间。此当地时间以1970年1月1日到现在所含有的毫秒数来表示。显然，这不是很合理，因此我们还要进行一些计算。</p>
<p><strong>第五步</strong></p>
<p>通过初始化一个新的<em>Data()</em>对象，并调用此对象的<em>toLocalString()</em>方法，我们将前一步中计算得到的时间值转换成一个大家可以看得懂的日期/时间字符串。</p>
<p>// convert msec value to date string</p>
<p>nd = new Date(bombay); </p>
<p>document.writeln("Bombay time is " + nd.toLocaleString() + "&lt;br&gt;");</p>
<p>这样转换就完成了！</p>
<p><strong>总结</strong></p>
<p>理解上面的步骤后，我们再看一看这段脚本（<strong>列表A</strong>），它建立一个紧凑，自定义的函数<em>calcTime()</em>来执行所有的计算并返回一个时间值。</p>
<p><strong>列表A</strong></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;script language="JavaScript"&gt;</p>
<p>// function to calculate local time</p>
<p>// in a different city</p>
<p>// given the city's UTC offset</p>
<p>function calcTime(city, offset) {</p>
<p>// create Date object for current location</p>
<p>d = new Date();</p>
<p>&nbsp;</p>
<p>// convert to msec</p>
<p>// add local time zone offset </p>
<p>// get UTC time in msec</p>
<p>utc = d.getTime() + (d.getTimezoneOffset() * 60000);</p>
<p>&nbsp;</p>
<p>// create new Date object for different city</p>
<p>// using supplied offset</p>
<p>nd = new Date(utc + (3600000*offset));</p>
<p>&nbsp;</p>
<p>// return time as a string</p>
<p>return "The local time in " + city + " is " + nd.toLocaleString();</p>
<p>}</p>
<p>// get Bombay time</p>
<p>alert(calcTime('Bombay', '+5.5'));</p>
<p>// get Singapore time</p>
<p>alert(calcTime('Singapore', '+8'));</p>
<p>// get London time</p>
<p>alert(calcTime('London', '+1'));</p>
<p>&lt;/script&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>这里，函数calcTime()接受一个城市名及它的国际标准时间（UTC）偏移值（按小时计）。然后内部执行所有上面描述的计算，并返回一个包含此城市当地时间的字符串。</p>
<p>以下是<strong>列表A</strong>输出内容的一些样本。</p>
<p>孟买当地时间为2005年8月1日，星期一下午4时43分51秒</p>
<p>新加坡当地时间为2005年8月1日，星期一下午7时13分51秒</p>
<p>伦敦当地时间为2005年8月1日，星期一下午12时13分51秒</p>
<p>下次你坐下来为你的网页编写时区脚本时，这段脚本有望节省你的一些时间。享受一下！！</p>
<img src ="http://www.blogjava.net/table/aggbug/234072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 18:00 <a href="http://www.blogjava.net/table/articles/234072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript脚本语言描述：document 文挡对象详解</title><link>http://www.blogjava.net/table/articles/234071.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234071.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234071.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234071.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写<br />
&nbsp;&nbsp; 否则会提示你一个错误信息 "引用的元素为空或者不是对象"<br />
---------------------------------------------------------------------
<p>对象属性<br />
document.title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置文档标题等价于HTML的&lt;title&gt;标签<br />
document.bgColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置页面背景色<br />
document.fgColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置前景色(文本颜色)<br />
document.linkColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //未点击过的链接颜色<br />
document.alinkColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //激活链接(焦点在此链接上)的颜色<br />
document.vlinkColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //已点击过的链接颜色<br />
document.URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置URL属性从而在同一窗口打开另一网页<br />
document.fileCreatedDate&nbsp;&nbsp; //文件建立日期，只读属性<br />
document.fileModifiedDate&nbsp; //文件修改日期，只读属性<br />
document.fileSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //文件大小，只读属性<br />
document.cookie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置和读出cookie<br />
document.charset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字符集 简体中文:gb2312<br />
---------------------------------------------------------------------<br />
对象方法<br />
document.write()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //动态向页面写入内容<br />
document.createElement(Tag)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建一个html标签对象<br />
document.getElementById(ID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获得指定ID值的对象<br />
document.getElementsByName(Name)&nbsp; //获得指定Name值的对象<br />
---------------------------------------------------------------------</p>
<p>images集合(页面中的图象)</p>
<p>a)通过集合引用<br />
document.images&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对应页面上的&lt;img&gt;标签<br />
document.images.length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对应页面上&lt;img&gt;标签的个数<br />
document.images[0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第1个&lt;img&gt;标签&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
document.images[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第i-1个&lt;img&gt;标签</p>
<p>b)通过nane属性直接引用<br />
&lt;img name="oImage"&gt;<br />
document.images.oImage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //document.images.name属性</p>
<p>c)引用图片的src属性<br />
document.images.oImage.src&nbsp; //document.images.name属性.src</p>
<p>d)创建一个图象<br />
var oImage<br />
oImage = new Image()<br />
document.images.oImage.src="/1.jpg"<br />
同时在页面上建立一个&lt;img&gt;标签与之对应就可以显示</p>
<p>&lt;html&gt;<br />
&lt;img name=oImage&gt;<br />
&lt;script language="javascript"&gt;<br />
&nbsp;&nbsp; var oImage<br />
&nbsp;&nbsp; oImage = new Image()<br />
&nbsp;&nbsp; document.images.oImage.src="/1.jpg"<br />
&lt;/script&gt;<br />
&lt;/html&gt;</p>
<p>----------------------------------------------------------------------</p>
<p>forms集合(页面中的表单)</p>
<p>a)通过集合引用<br />
document.forms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对应页面上的&lt;form&gt;标签<br />
document.forms.length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对应页面上&lt;form&gt;标签的个数<br />
document.forms[0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第1个&lt;form&gt;标签<br />
document.forms[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第i-1个&lt;form&gt;标签<br />
document.forms[i].length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第i-1个&lt;form&gt;中的控件数<br />
document.forms[i].elements[j]&nbsp; //第i-1个&lt;form&gt;中第j-1个控件</p>
<p>b)通过标签name属性直接引用<br />
&lt;form name="Myform"&gt;&lt;input name="myctrl"&gt;&lt;/form&gt;<br />
document.Myform.myctrl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //document.表单名.控件名</p>
<p>-----------------------------------------------------------------------<br />
&lt;html&gt;<br />
&lt;!--Text控件相关Script--&gt;<br />
&lt;form name="Myform"&gt;<br />
&lt;input type="text" name="oText"&gt;<br />
&lt;input type="password" name="oPswd"&gt;<br />
&lt;form&gt;<br />
&lt;script language="javascript"&gt;<br />
//获取文本密码框的值<br />
document.write(document.Myform.oText.value)<br />
document.write(document.Myform.oPswd.value)<br />
&lt;/script&gt;<br />
&lt;/html&gt;<br />
-----------------------------------------------------------------------<br />
&lt;html&gt;<br />
&lt;!--Select控件相关Script--&gt;<br />
&lt;form name="Myform"&gt;<br />
&lt;select name="oSelect"&gt;<br />
&lt;option value="1"&gt;1&lt;/option&gt;<br />
&lt;option value="2"&gt;2&lt;/option&gt;<br />
&lt;option value="3"&gt;3&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;/form&gt;</p>
<p>&lt;script language="javascript"&gt;<br />
&nbsp;&nbsp; //遍历select控件的option项<br />
&nbsp;&nbsp; var length<br />
&nbsp;&nbsp; length=document.Myform.oSelect.length<br />
&nbsp;&nbsp; for(i=0;i&lt;length;i++)<br />
&nbsp;&nbsp; document.write(document.Myform.oSelect[i].value)<br />
&lt;/script&gt;</p>
<p>&lt;script language="javascript"&gt;<br />
&nbsp;&nbsp; //遍历option项并且判断某个option是否被选中<br />
&nbsp;&nbsp; for(i=0;i&lt;document.Myform.oSelect.length;i++){<br />
&nbsp;&nbsp; if(document.Myform.oSelect[i].selected!=true)<br />
&nbsp;&nbsp; document.write(document.Myform.oSelect[i].value)<br />
&nbsp;&nbsp; else<br />
&nbsp;&nbsp; document.write("&lt;font color=red&gt;"+document.Myform.oSelect[i].value+"&lt;/font&gt;")&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
&lt;/script&gt;</p>
<p>&lt;script language="javascript"&gt;<br />
&nbsp;&nbsp; //根据SelectedIndex打印出选中的option<br />
&nbsp;&nbsp; //(0到document.Myform.oSelect.length-1)<br />
&nbsp;&nbsp; i=document.Myform.oSelect.selectedIndex<br />
&nbsp;&nbsp; document.write(document.Myform.oSelect[i].value)<br />
&lt;/script&gt;</p>
<p>&lt;script language="javascript"&gt;<br />
&nbsp;&nbsp; //动态增加select控件的option项<br />
&nbsp;&nbsp; var oOption = document.createElement("OPTION");<br />
&nbsp;&nbsp; oOption.text="4";<br />
&nbsp;&nbsp; oOption.value="4";<br />
&nbsp;&nbsp; document.Myform.oSelect.add(oOption);<br />
&lt;/script&gt;<br />
&lt;html&gt;<br />
-----------------------------------------------------------------------<br />
&lt;Div id="oDiv"&gt;Text&lt;/Div&gt;<br />
document.all.oDiv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //引用图层oDiv<br />
document.all.oDiv.style&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
document.all.oDiv.style.display=""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //图层设置为可视<br />
document.all.oDiv.style.display="none"&nbsp; //图层设置为隐藏<br />
/*document.all表示document中所有对象的集合<br />
只有ie支持此属性，因此也用来判断浏览器的种类*/</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 17:58 <a href="http://www.blogjava.net/table/articles/234071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript事件查询综合</title><link>http://www.blogjava.net/table/articles/234070.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234070.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234070.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234070.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>click() 对象.click() 使对象被点击。<br />
closed 对象.closed 对象窗口是否已关闭true/false<br />
clearTimeout(对象) 清除已设置的setTimeout对象<br />
clearInterval(对象) 清除已设置的setInterval对象<br />
confirm("提示信息") 弹出确认框，确定返回true取消返回false<br />
cursor:样式 更改鼠标样式 hand crosshair text wait help default auto e/s/w/n-resize</p>
<p>event.clientX 返回最后一次点击鼠标X坐标值；<br />
event.clientY 返回最后一次点击鼠标Y坐标值；<br />
event.offsetX 返回当前鼠标悬停X坐标值<br />
event.offsetY 返回当前鼠标悬停Y坐标值</p>
<p>document.write(document.lastModified) 网页最后一次更新时间<br />
document.ondblclick=x 当双击鼠标产生事件<br />
document.onmousedown=x 单击鼠标键产生事件</p>
<p>document.body.scrollTop; 返回和设置当前竖向滚动条的坐标值，须与函数配合,<br />
document.body.scrollLeft; 返回和设置当前横向滚动务的坐标值，须与函数配合，<br />
document.title document.title="message"; 当前窗口的标题栏文字<br />
document.bgcolor document.bgcolor="颜色值"; 改变窗口背景颜色<br />
document.Fgcolor document.Fgcolor="颜色值"; 改变正文颜色<br />
document.linkcolor document.linkcolor="颜色值"; 改变超联接颜色<br />
document.alinkcolor document.alinkcolor="颜色值"; 改变正点击联接的颜色<br />
document.VlinkColor document.VlinkColor="颜色值"; 改变已访问联接的颜色<br />
document.forms.length 返回当前页form表单数<br />
document.anchors.length 返回当前页锚的数量<br />
document.links.length 返回当前页联接的数量<br />
document.onmousedown=x 单击鼠标触发事件<br />
document.ondblclick=x 双击鼠标触发事件<br />
defaultStatus window.status=defaultStatus; 将状态栏设置默认显示</p>
<p>function function xx(){...} 定义函数<br />
isNumeric 判断是否是数字<br />
innerHTML xx=对象.innerHTML 输入某对象标签中的html源代码<br />
innerText divid.innerText=xx 将以div定位以id命名的对象值设为XX</p>
<p>location.reload(); 使本页刷新，target可等于一个刷新的网页</p>
<p>Math.random() 随机涵数,只能是0到1之间的数,如果要得到其它数,可以为*10,再取整<br />
Math.floor(number) 将对象number转为整数，舍取所有小数<br />
Math.min(1,2) 返回1,2哪个小<br />
Math.max(1,2) 返回1,2哪个大</p>
<p>navigator.appName 返回当前浏览器名称<br />
navigator.appVersion 返回当前浏览器版本号<br />
navigator.appCodeName 返回当前浏览器代码名字<br />
navigator.userAgent 返回当前浏览器用户代标志</p>
<p>onsubmit onsubmit="return(xx())" 使用函数返回值<br />
opener opener.document.对象 控制原打开窗体对象</p>
<p>prompt xx=window.prompt("提示信息","预定值"); 输入语句<br />
parent parent.框架名.对象 控制框架页面</p>
<p>return return false 返回值<br />
random 随机参数（0至1之间）<br />
reset() form.reset(); 使form表单内的数据重置</p>
<p>split("") string.split("") 将string对象字符以逗号隔开<br />
submit() form对象.submit() 使form对象提交数据</p>
<p>String对象的 charAt(x)对象 反回指定对象的第多少位的字母<br />
lastIndexOf("string") 从右到左询找指定字符，没有返回-1<br />
indexOf("string") 从左到右询找指定字符，没有返回-1<br />
LowerCase() 将对象全部转为小写<br />
UpperCase() 将对象全部转为大写<br />
substring(0,5) string.substring(x,x) 返回对象中从0到5的字符<br />
setTimeout("function",time) 设置一个超时对象<br />
setInterval("function",time) 设置一个超时对象</p>
<p>toLocaleString() x.toLocaleString() 从x时间对象中获取时间，以字符串型式存在<br />
typeof(变量名) 检查变量的类型，值有：String,Boolean,Object,Function,Underfined</p>
<p>window.event.button==1/2/3 鼠标键左键等于1右键等于2两个键一起按为3<br />
window.screen.availWidth 返回当前屏幕宽度(空白空间)<br />
window.screen.availHeight 返回当前屏幕高度(空白空间)<br />
window.screen.width 返回当前屏幕宽度(分辨率值)<br />
window.screen.height 返回当前屏幕高度(分辨率值)<br />
window.document.body.offsetHeight; 返回当前网页高度<br />
window.document.body.offsetWidth; 返回当前网页宽度<br />
window.resizeTo(0,0) 将窗口设置宽高<br />
window.moveTo(0,0) 将窗口移到某位置<br />
window.focus() 使当前窗口获得焦点<br />
window.scroll(x,y) 窗口滚动条坐标，y控制上下移动，须与函数配合<br />
window.open() window.open("地址","名称","属性")<br />
属性:toolbar(工具栏),location(地址栏),directions,status(状态栏),<br />
menubar(菜单栏),scrollbar(滚动条),resizable(改变大小), width(宽),height(高),fullscreen(全 屏),scrollbars(全屏时无滚动条无参 数,channelmode(宽屏),left(打开窗口x坐标),top(打开窗口y坐标)<br />
window.location = 'view-source:' + window.location.href 应用事件查看网页源代码;</p>
<p>a=new Date(); //创建a为一个新的时期对象<br />
y=a.getYear(); //y的值为从对象a中获取年份值 两位数年份<br />
y1=a.getFullYear(); //获取全年份数 四位数年份<br />
m=a.getMonth(); //获取月份值<br />
d=a.getDate(); //获取日期值<br />
d1=a.getDay(); //获取当前星期值<br />
h=a.getHours(); //获取当前小时数<br />
m1=a.getMinutes(); //获取当前分钟数<br />
s=a.getSeconds(); //获取当前秒钟数</p>
<p>对象.style.fontSize="文字大小";<br />
单位：mm/cm/in英寸/pc帕/pt点/px象素/em文字高<br />
1in=1.25cm<br />
1pc=12pt<br />
1pt=1.2px(800*600分辩率下)</p>
<p>文本字体属性：<br />
fontSize大小<br />
family字体<br />
color颜色<br />
fontStyle风格，取值为normal一般,italic斜体,oblique斜体且加粗<br />
fontWeight加粗,取值为100到900不等,900最粗,light,normal,bold<br />
letterSpacing间距,更改文字间距离,取值为,1pt,10px,1cm<br />
textDecoration:文字修饰;取值,none不修饰,underline下划线,overline上划线<br />
background:文字背景颜色,<br />
backgroundImage:背景图片,取值为图片的插入路径</p>
<p>点击网页正文函数调用触发器：</p>
<p>1.onClick 当对象被点击<br />
2.onLoad 当网页打开,只能书写在body中<br />
3.onUnload 当网页关闭或离开时,只能书写在body中<br />
4.onmouseover 当鼠标悬于其上时<br />
5.onmouseout 当鼠标离开对象时<br />
6.onmouseup 当鼠标松开<br />
7.onmousedown 当鼠标按下键<br />
8.onFocus 当对象获取焦点时<br />
9.onSelect 当对象的文本被选中时<br />
10.onChange 当对象的内容被改变<br />
11.onBlur 当对象失去焦点<br />
onsubmit=return(ss())表单调用时返回的值</p>
<p>直线 border-bottom:1x solid black<br />
虚线 border-bottom:1x dotted black<br />
点划线 border-bottom:2x dashed black<br />
双线 border-bottom:5x double black<br />
槽状 border-bottom:1x groove black<br />
脊状 border-bottom:1x ridge black</p>
<p>1.边缘高光glow(color=颜色,strength=亮光大小)</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 17:54 <a href="http://www.blogjava.net/table/articles/234070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript验证给定的日期的合法性</title><link>http://www.blogjava.net/table/articles/234069.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234069.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234069.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234069.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>&lt;script language="javascript"&gt;</p>
<p>//验证给定的日期是否合法&nbsp;&nbsp; ,参数格式要求：yyyy-mm-dd 可以根据情况更改正则表达式<br />
function isDate(oStartDate)<br />
{<br />
&nbsp;&nbsp;&nbsp; //对日期格式进行验证 要求为2000-2099年&nbsp; 格式为 yyyy-mm-dd 并且可以正常转换成正确的日期<br />
&nbsp;&nbsp;&nbsp; var pat_hd=/^20\d{2}-((0[1-9]{1})|(1[0-2]{1}))-((0[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;<br />
&nbsp; <br />
&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(!pat_hd.test(oStartDate)){throw "日期非法！";}<br />
&nbsp;&nbsp;var arr_hd=oStartDate.split("-");<br />
&nbsp;&nbsp;var dateTmp;<br />
&nbsp;&nbsp;dateTmp= new Date(arr_hd[0],parseFloat(arr_hd[1])-1,parseFloat(arr_hd[2]));<br />
&nbsp;&nbsp;if(dateTmp.getFullYear()!=parseFloat(arr_hd[0]) || dateTmp.getMonth()!=parseFloat(arr_hd[1]) -1 || dateTmp.getDate()!=parseFloat(arr_hd[2]))<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;throw "日期非法！";<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;catch(ex)<br />
&nbsp;{<br />
&nbsp;&nbsp;if(ex.description)<br />
&nbsp;&nbsp;&nbsp;{return false;}<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{return false;}<br />
&nbsp;}<br />
&nbsp;return true;<br />
}</p>
<p>//调用</p>
<p>alert(isDate("2005-12-12"));<br />
alert(isDate("2004-13-30"));<br />
alert(isDate("2005-12-32"));<br />
alert(isDate("2005-02-30"));</p>
<p>&lt;/script&gt;</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 17:53 <a href="http://www.blogjava.net/table/articles/234069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现一个日期下拉菜单</title><link>http://www.blogjava.net/table/articles/234068.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234068.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234068.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234068.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">
<p>这篇文章的主旨是弄清楚如何根据实际需求实现一个联动菜单以及联动菜单的原理，实例是实现一个日期选择下拉菜单。本文调试环境为IE6/firefox1.5。</p>
<p>首先来分析一下日期下拉菜单的需求。建议大家在写任何程序的时候都应该在动手编程之前想清楚自己需要些什么，这样编程才有效率。</p>
<p><strong>年份：</strong> 一般来说有一个有效年份，比如说1900年至当前年份才是为效的，这个要根据实际需求来确定，如果是该下拉菜单是用来选择出生年月日还得把最大的年份减到一定的数目，如果有人的生日选择了2005年（即当前的年份），那是不正常的。</p>
<p><strong>月份：</strong>没有什么特殊需求，不管是哪一年都是有十二个月。</p>
<p><strong>天数：</strong>每个月的天数都可能是不定的，当然这可以根据一定的算法求出来，而它的根据就是当前选择的年份和月份。月份都有一个固定的天数，即一、三、五、七、八、十、十二月是三十一天，而四、六、九、十一月是三十天，二月份要根据当年是否为闰年判断是二十八天还是二十九天。求当月的天数我提出一个比较简单的算法，可以只根据当前的年份和月份就可以求出当月的天数，这会在后边讲一讲思路并将其实现。</p>
<p>好了，现在我们来具体实现这个日期联动下拉菜单。</p>
<p>联动下拉菜单是以两个或多个select元素为单位的，为了让这些菜单更多紧密的工作，我们可以实现一个类用来管理它们的初始化、事件，在这里就使用DateSelector为类名，它有三个属性，分别为年、月、日的下拉菜单，而这三个select元素是由构造函数的参数传进来的，另外为了更灵活地使用它，我们还可以再给DateSelector类的构造函数增加一个（Date对象）或三个参数(int数值)，表示初始化的年月日。由于参数个数不定，我们可以不将另外增加的参数写入参数表里，而是在运行时判断arguments对象的length属性来执行不同的操作。arguments对象存储了当前函数的参数信息，可以查阅一下相关的资料比如说《Windows脚本技术》。</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</span>
<p>接下来开始对联动菜单进行初始化，首先是年份，我们可以给类增加一个MinYear属性表示最小的年份，再增加一个MaxYear表示最大的年份，实现一个InitYearSelect方法初始化年份，实现一个InitMonthSelect方法初始化月份。由于这几个属性和方法的思路都是很简单，就不一一讲解，看看代码是怎么写的应该就能够明白，如果对类方面有不清楚有地方可以参考我发表在无忧脚本另一篇文章《由浅到深了解JavaScript类》。</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
&nbsp;&nbsp;&nbsp; this.InitYearSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitMonthSelect();<br />
}</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MinYear = 1900;</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MaxYear = (new Date()).getFullYear();</p>
<p>// 初始化年份<br />
DateSelector.prototype.InitYearSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到年份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = this.MaxYear; i &gt;= this.MinYear; i--)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到年份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 初始化月份<br />
DateSelector.prototype.InitMonthSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到月份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 13; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到月份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;select id="selYear"&gt;&lt;/select&gt;<br />
&lt;select id="selMonth"&gt;&lt;/select&gt;<br />
&lt;select id="selDay"&gt;&lt;/select&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var selYear = window.document.getElementById("selYear");<br />
var selMonth = window.document.getElementById("selMonth");<br />
var selDay = window.document.getElementById("selDay");</p>
<p>// 新建一个DateSelector类的实例，将三个select对象传进去<br />
new DateSelector(selYear, selMonth ,selDay);<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</span>
<p>接下来要对天数进行初始化了，前边有说过天数是不定的，那要如何准确求出它的天数呢？我们稍加分析就知道每个月的最后一天就是该月的天数，相当于下一个月的第一天的前一天，比如说我们要求2005年11月的天数，那我们只需要得到2005年12月一日的前一天即可得到2005年11月最后一天。可以给DateSelector添加一个方法DaysInMonth来实现该功能。</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
&nbsp;&nbsp;&nbsp; this.InitYearSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitMonthSelect();<br />
}</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MinYear = 1900;</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MaxYear = (new Date()).getFullYear();</p>
<p>// 初始化年份<br />
DateSelector.prototype.InitYearSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到年份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = this.MaxYear; i &gt;= this.MinYear; i--)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到年份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 初始化月份<br />
DateSelector.prototype.InitMonthSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到月份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 13; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到月份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 根据年份与月份获取当月的天数<br />
DateSelector.DaysInMonth = function(year, month)<br />
{<br />
&nbsp;&nbsp;&nbsp; var date = new Date(year, month, 0);<br />
&nbsp;&nbsp;&nbsp; return date.getDate();<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;select id="selYear"&gt;&lt;/select&gt;<br />
&lt;select id="selMonth"&gt;&lt;/select&gt;<br />
&lt;select id="selDay"&gt;&lt;/select&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var selYear = window.document.getElementById("selYear");<br />
var selMonth = window.document.getElementById("selMonth");<br />
var selDay = window.document.getElementById("selDay");</p>
<p>// 新建一个DateSelector类的实例，将三个select对象传进去<br />
new DateSelector(selYear, selMonth ,selDay);<br />
alert("2004年2月的天数为" + DateSelector.DaysInMonth(2004, 2));<br />
alert("2005年2月的天数为" + DateSelector.DaysInMonth(2005, 2));<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</span>
<p>很明显，这种方法根本不需要考虑到该年份是否为闰年就可以轻松求出指定月的天数。另外，有些网友可能会对&#8220;var date = new Date(year, month, 0);&#8221;这句代码觉得奇怪，传入的是2005,2,0，这看起来似乎是求二月份第一天的前一天即一月份的最后一天，为什么还会得到二月份的天数？这里必须说明一天，JavaScript的Date对象里的月份是由0开始到11结束，也就是说0表示一月，2表示三月，所以就有这种错觉，在使用JavaScript的Date对象时要特别注意这一点。</p>
<p>好了，天数的算法也解决了，那么我们可以轻松写出一个InitDaySelect方法来初始化天数了，在这个方法里要根据当前年份下拉菜单和月份下拉菜单的值算出该月的天数，由于天数是变动的，因此我们在该方法里也可事先清空天数下拉菜单的内容。</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
&nbsp;&nbsp;&nbsp; this.InitYearSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitMonthSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitDaySelect();<br />
}</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MinYear = 1900;</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MaxYear = (new Date()).getFullYear();</p>
<p>// 初始化年份<br />
DateSelector.prototype.InitYearSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到年份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = this.MaxYear; i &gt;= this.MinYear; i--)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到年份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 初始化月份<br />
DateSelector.prototype.InitMonthSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到月份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 13; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到月份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 根据年份与月份获取当月的天数<br />
DateSelector.DaysInMonth = function(year, month)<br />
{<br />
&nbsp;&nbsp;&nbsp; var date = new Date(year, month, 0);<br />
&nbsp;&nbsp;&nbsp; return date.getDate();<br />
}</p>
<p>// 初始化天数<br />
DateSelector.prototype.InitDaySelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 使用parseInt函数获取当前的年份和月份<br />
&nbsp;&nbsp;&nbsp; var year = parseInt(this.selYear.value);<br />
&nbsp;&nbsp;&nbsp; var month = parseInt(this.selMonth.value);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 获取当月的天数<br />
&nbsp;&nbsp;&nbsp; var daysInMonth = DateSelector.DaysInMonth(year, month);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 清空原有的选项<br />
&nbsp;&nbsp;&nbsp; this.selDay.options.length = 0;<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到天数select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt;= daysInMonth ; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到天数select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selDay.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;select id="selYear"&gt;&lt;/select&gt;<br />
&lt;select id="selMonth"&gt;&lt;/select&gt;<br />
&lt;select id="selDay"&gt;&lt;/select&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var selYear = window.document.getElementById("selYear");<br />
var selMonth = window.document.getElementById("selMonth");<br />
var selDay = window.document.getElementById("selDay");</p>
<p>// 新建一个DateSelector类的实例，将三个select对象传进去<br />
new DateSelector(selYear, selMonth ,selDay);<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p></span></p>
<p>现在已经写好几个方法用来初始化三个下拉菜单的选项了，我们需要做的是让它们结合并动起来。如果年份或月份有变动，那么应该重新计算天数并且重新初始化天数，这可以通过selYear和selMonth的onchange来实现。由于这三个下拉菜单是要紧密联动的，因此特地给它们增加一个属性Selector，值为当前的DateSelector实例。同时实现selYear和selMonth的onchange，如果发生onchange则调用InitDaySelect重新初始化selDay下拉菜单。</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
&nbsp;&nbsp;&nbsp; this.InitYearSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitMonthSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitDaySelect();<br />
&nbsp;&nbsp;&nbsp; this.selYear.Group = this;<br />
&nbsp;&nbsp;&nbsp; this.selMonth.Group = this;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 给年份、月份下拉菜单添加处理onchange事件的函数<br />
&nbsp;&nbsp;&nbsp; if(window.document.all != null) // IE<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.attachEvent("onchange", DateSelector.Onchange);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.attachEvent("onchange", DateSelector.Onchange);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else // Firefox<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.addEventListener("change", DateSelector.Onchange, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.addEventListener("change", DateSelector.Onchange, false);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MinYear = 1900;</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MaxYear = (new Date()).getFullYear();</p>
<p>// 初始化年份<br />
DateSelector.prototype.InitYearSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到年份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = this.MaxYear; i &gt;= this.MinYear; i--)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到年份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 初始化月份<br />
DateSelector.prototype.InitMonthSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到月份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 13; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到月份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 根据年份与月份获取当月的天数<br />
DateSelector.DaysInMonth = function(year, month)<br />
{<br />
&nbsp;&nbsp;&nbsp; var date = new Date(year, month, 0);<br />
&nbsp;&nbsp;&nbsp; return date.getDate();<br />
}</p>
<p>// 初始化天数<br />
DateSelector.prototype.InitDaySelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 使用parseInt函数获取当前的年份和月份<br />
&nbsp;&nbsp;&nbsp; var year = parseInt(this.selYear.value);<br />
&nbsp;&nbsp;&nbsp; var month = parseInt(this.selMonth.value);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 获取当月的天数<br />
&nbsp;&nbsp;&nbsp; var daysInMonth = DateSelector.DaysInMonth(year, month);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 清空原有的选项<br />
&nbsp;&nbsp;&nbsp; this.selDay.options.length = 0;<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到天数select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt;= daysInMonth ; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到天数select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selDay.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 处理年份和月份onchange事件的方法，它获取事件来源对象（即selYear或selMonth）<br />
// 并调用它的Group对象（即DateSelector实例，请见构造函数）提供的InitDaySelect方法重新初始化天数<br />
// 参数e为event对象<br />
DateSelector.Onchange = function(e)<br />
{<br />
&nbsp;&nbsp;&nbsp; var selector = window.document.all != null ? e.srcElement : e.target;<br />
&nbsp;&nbsp;&nbsp; selector.Group.InitDaySelect();<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;select id="selYear"&gt;&lt;/select&gt;<br />
&lt;select id="selMonth"&gt;&lt;/select&gt;<br />
&lt;select id="selDay"&gt;&lt;/select&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var selYear = window.document.getElementById("selYear");<br />
var selMonth = window.document.getElementById("selMonth");<br />
var selDay = window.document.getElementById("selDay");</p>
<p>// 新建一个DateSelector类的实例，将三个select对象传进去<br />
new DateSelector(selYear, selMonth ,selDay);<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</span>
<p>到此为止我们已经基本实现DateSelector类要提供的功能了，为了更灵活地控制它，我们应该给它增加设定初始值的功能。一般来说有两种需求，第一种是传入一个Date对象，第二种是传入三个值分别表示年、月、日，也就是说我们必须重载构造函数，形式如下：</p>
<p>function DateSelector(selYear, selMonth, selDay)<br />
function DateSelector(selYear, selMonth, selDay, date)<br />
function DateSelector(selYear, selMonth, selDay, year, month, day)</p>
<p>当然，JavaScript没有重载的概念，但我们可以给它模拟出来，方法就是根据传入参数的个数（即arguments对象的length）以及类型来判断，这需要对原有的构造函数进行一定的改动使之更模块化地实现这三种情况。由于年份和月份是固定不变的，参数只会改变selYear和selMonth的已选选项，而selDay则要根据selYear和selMonth的值再动态生成，因此我们将初始化菜单代码再提出来写一个InitSelector方法里，它有三个参数，分别是year, month, day，功能是根据这三个参数来生成相应的菜单选项，我们这次调试使用2004年2月29日为初始值。要设置初始值的时候一般我们会循环访问option的值，但这里情况特殊，我们是可以根据一定的计算来得到默认选择的option的下标的。</p>
<p>年份下标 = MaxYear - year<br />
月份下标 = month - 1<br />
天数下标 = day - 1</p>
<p><span class="code"></p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;title&gt;如何实现一个日期下拉菜单&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function DateSelector(selYear, selMonth, selDay)<br />
{<br />
&nbsp;&nbsp;&nbsp; this.selYear = selYear;<br />
&nbsp;&nbsp;&nbsp; this.selMonth = selMonth;<br />
&nbsp;&nbsp;&nbsp; this.selDay = selDay;<br />
&nbsp;&nbsp;&nbsp; this.selYear.Group = this;<br />
&nbsp;&nbsp;&nbsp; this.selMonth.Group = this;<br />
&nbsp;&nbsp;&nbsp; // 给年份、月份下拉菜单添加处理onchange事件的函数<br />
&nbsp;&nbsp;&nbsp; if(window.document.all != null) // IE<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.attachEvent("onchange", DateSelector.Onchange);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.attachEvent("onchange", DateSelector.Onchange);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else // Firefox<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.addEventListener("change", DateSelector.Onchange, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.addEventListener("change", DateSelector.Onchange, false);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if(arguments.length == 4) // 如果传入参数个数为4，最后一个参数必须为Date对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.InitSelector(arguments[3].getFullYear(), arguments[3].getMonth() + 1, arguments[3].getDate());<br />
&nbsp;&nbsp;&nbsp; else if(arguments.length == 6) // 如果传入参数个数为6，最后三个参数必须为初始的年月日数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.InitSelector(arguments[3], arguments[4], arguments[5]);<br />
&nbsp;&nbsp;&nbsp; else // 默认使用当前日期<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dt = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.InitSelector(dt.getFullYear(), dt.getMonth() + 1, dt.getDate());<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MinYear = 1900;</p>
<p>// 增加一个最大年份的属性<br />
DateSelector.prototype.MaxYear = (new Date()).getFullYear();</p>
<p>// 初始化年份<br />
DateSelector.prototype.InitYearSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到年份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = this.MaxYear; i &gt;= this.MinYear; i--)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到年份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selYear.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 初始化月份<br />
DateSelector.prototype.InitMonthSelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到月份select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 13; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到月份select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selMonth.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 根据年份与月份获取当月的天数<br />
DateSelector.DaysInMonth = function(year, month)<br />
{<br />
&nbsp;&nbsp;&nbsp; var date = new Date(year, month, 0);<br />
&nbsp;&nbsp;&nbsp; return date.getDate();<br />
}</p>
<p>// 初始化天数<br />
DateSelector.prototype.InitDaySelect = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; // 使用parseInt函数获取当前的年份和月份<br />
&nbsp;&nbsp;&nbsp; var year = parseInt(this.selYear.value);<br />
&nbsp;&nbsp;&nbsp; var month = parseInt(this.selMonth.value);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 获取当月的天数<br />
&nbsp;&nbsp;&nbsp; var daysInMonth = DateSelector.DaysInMonth(year, month);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 清空原有的选项<br />
&nbsp;&nbsp;&nbsp; this.selDay.options.length = 0;<br />
&nbsp;&nbsp;&nbsp; // 循环添加OPION元素到天数select对象中<br />
&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt;= daysInMonth ; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 新建一个OPTION对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var op = window.document.createElement("OPTION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.value = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置OPTION对象的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op.innerHTML = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到天数select对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.selDay.appendChild(op);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>// 处理年份和月份onchange事件的方法，它获取事件来源对象（即selYear或selMonth）<br />
// 并调用它的Group对象（即DateSelector实例，请见构造函数）提供的InitDaySelect方法重新初始化天数<br />
// 参数e为event对象<br />
DateSelector.Onchange = function(e)<br />
{<br />
&nbsp;&nbsp;&nbsp; var selector = window.document.all != null ? e.srcElement : e.target;<br />
&nbsp;&nbsp;&nbsp; selector.Group.InitDaySelect();<br />
}</p>
<p>// 根据参数初始化下拉菜单选项<br />
DateSelector.prototype.InitSelector = function(year, month, day)<br />
{<br />
&nbsp;&nbsp;&nbsp; // 由于外部是可以调用这个方法，因此我们在这里也要将selYear和selMonth的选项清空掉<br />
&nbsp;&nbsp;&nbsp; // 另外因为InitDaySelect方法已经有清空天数下拉菜单，因此这里就不用重复工作了<br />
&nbsp;&nbsp;&nbsp; this.selYear.options.length = 0;<br />
&nbsp;&nbsp;&nbsp; this.selMonth.options.length = 0;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 初始化年、月<br />
&nbsp;&nbsp;&nbsp; this.InitYearSelect();<br />
&nbsp;&nbsp;&nbsp; this.InitMonthSelect();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 设置年、月初始值<br />
&nbsp;&nbsp;&nbsp; this.selYear.selectedIndex = this.MaxYear - year;<br />
&nbsp;&nbsp;&nbsp; this.selMonth.selectedIndex = month - 1;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 初始化天数<br />
&nbsp;&nbsp;&nbsp; this.InitDaySelect();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 设置天数初始值<br />
&nbsp;&nbsp;&nbsp; this.selDay.selectedIndex = day - 1;<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;select id="selYear"&gt;&lt;/select&gt;<br />
&lt;select id="selMonth"&gt;&lt;/select&gt;<br />
&lt;select id="selDay"&gt;&lt;/select&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var selYear = window.document.getElementById("selYear");<br />
var selMonth = window.document.getElementById("selMonth");<br />
var selDay = window.document.getElementById("selDay");</p>
<p>// 新建一个DateSelector类的实例，将三个select对象传进去<br />
new DateSelector(selYear, selMonth ,selDay, 2004, 2, 29);<br />
// 也可以试试下边的代码<br />
// var dt = new Date(2004, 1, 29);<br />
// new DateSelector(selYear, selMonth ,selDay, dt);<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</span>
<p>好了，日期下拉菜单已经能够如我们想象的那样开始工作了，在调用的时候我们只需要执行new DateSelector(selYear, selMonth ,selDay, 2004, 2, 29);就可以，而且它内部关系紧密，你同一个页面可以同时运行好几组日期下拉菜单而互不影响，这也是我要采用类的形式而不是采用一组函数来实现的缘由了，我以后写的文章也会尽可能采用类的形式，这样写出来的代码使用起来会更加方便。像以往一样，我也得说88啦，希望大家能够继续支持无忧脚本的原创文章，并且踊跃参与到其中来。</p>
</div>
<img src ="http://www.blogjava.net/table/aggbug/234068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 17:50 <a href="http://www.blogjava.net/table/articles/234068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>距离北京2008年奥运会开幕的倒记时特效</title><link>http://www.blogjava.net/table/articles/234064.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Mon, 13 Oct 2008 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/234064.html</guid><wfw:comment>http://www.blogjava.net/table/comments/234064.html</wfw:comment><comments>http://www.blogjava.net/table/articles/234064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/234064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/234064.html</trackback:ping><description><![CDATA[<div class="content" id="BodyLabel" style="padding-right: 10px; display: block; padding-left: 10px; padding-bottom: 0px; padding-top: 0px">距离北京奥运会开幕还有<br />
&lt;br&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;倒计时测试&lt;/title&gt;<br />
&lt;!--倒计时设置代码--&gt;<br />
&lt;script language="JavaScript"&gt; <br />
&lt;!-- hide script from old browser<br />
var DifferenceHour = -1<br />
var DifferenceMinute = -1<br />
var DifferenceSecond = -1<br />
var Tday = new Date("Aug 8, 2008 20:00:00")&nbsp;&nbsp; //**倒计时时间点-注意格式<br />
var daysms = 24 * 60 * 60 * 1000<br />
var hoursms = 60 * 60 * 1000<br />
var Secondms = 60 * 1000<br />
var microsecond = 1000 <br />
function clock()<br />
{<br />
var time = new Date()<br />
var hour = time.getHours()<br />
var minute = time.getMinutes()<br />
var second = time.getSeconds()<br />
var timevalue = ""+((hour &gt; 12) ? hour-12:hour)<br />
timevalue +=((minute &lt; 10) ? ":0":":")+minute<br />
timevalue +=((second &lt; 10) ? ":0":":")+second<br />
timevalue +=((hour &gt;12 ) ? " PM":" AM")<br />
// document.formnow.now.value = timevalue<br />
var convertHour = DifferenceHour<br />
var convertMinute = DifferenceMinute<br />
var convertSecond = DifferenceSecond<br />
var Diffms = Tday.getTime() - time.getTime()<br />
DifferenceHour = Math.floor(Diffms / daysms)<br />
Diffms -= DifferenceHour * daysms<br />
DifferenceMinute = Math.floor(Diffms / hoursms)<br />
Diffms -= DifferenceMinute * hoursms<br />
DifferenceSecond = Math.floor(Diffms / Secondms)<br />
Diffms -= DifferenceSecond * Secondms<br />
var dSecs = Math.floor(Diffms / microsecond)<br />
if(convertHour != DifferenceHour) document.formnow.dd.value=DifferenceHour<br />
if(convertMinute != DifferenceMinute) document.formnow.hh.value=DifferenceMinute<br />
if(convertSecond != DifferenceSecond) document.formnow.mm.value=DifferenceSecond<br />
document.formnow.ss.value=dSecs<br />
// document.formnow.Tnow.value= DifferenceHour DifferenceMinute + DifferenceSecond + dSecs<br />
setTimeout("clock()",1000)<br />
} <br />
// end hiding --&gt; <br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;!--BODY里面的ONLOAD注意--&gt;<br />
&lt;body onload="clock();return true" text="red"&gt;<br />
&lt;!--实现显示--&gt;<br />
&lt;form name="formnow"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="dd" type="text" style="border:0;" size=2&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 天<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="hh" type="text" style="border:0;" size=2&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小时<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="mm" type="text" style="border:0;" size=2&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="ss" type="text" style="border:0;" size=2&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 秒 <br />
&nbsp; &lt;/form&gt;<br />
&lt;!--倒计时完毕--&gt;</div>
<img src ="http://www.blogjava.net/table/aggbug/234064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2008-10-13 17:41 <a href="http://www.blogjava.net/table/articles/234064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>