﻿<?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-HelloWorld 善战者,求之于势,不责于人;故能择人而任势。-随笔分类-html/javascript/css</title><link>http://www.blogjava.net/zhaochengming/category/24905.html</link><description> 知止而后有定，定而后能静，静而后能安，安而后能虑，虑而后能得。物有本末，事有终始。知所先后，则近道矣。</description><language>zh-cn</language><lastBuildDate>Sat, 23 Feb 2013 02:26:13 GMT</lastBuildDate><pubDate>Sat, 23 Feb 2013 02:26:13 GMT</pubDate><ttl>60</ttl><item><title>Console命令详解,让调试js代码变得更简单</title><link>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 22 Feb 2013 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/395606.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/395606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/395606.html</trackback:ping><description><![CDATA[<div class="asset-body" style="margin: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><a href="http://getfirebug.com/" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug</a>是网页开发的利器，能够极大地提升工作效率。<br /></p></div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">但是，它不太容易上手。我曾经翻译过一篇<a href="http://www.ruanyifeng.com/blog/2008/06/firebug_tutorial.html" target="_blank" style="color: #1a356e; text-decoration: initial;">《Firebug入门指南》</a>，介绍了一些基本用法。今天，继续介绍它的高级用法。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">===================================</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>Firebug控制台详解</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">作者：阮一峰<br />出处：http://www.ruanyifeng.com/blog/2011/03/firebug_console_tutorial.html</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032616.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><br />控制台（Console）是Firebug的第一个面板，也是最重要的面板，主要作用是显示网页加载过程中产生各类信息。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>一、显示信息的命令</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">Firebug内置一个console对象，提供5种方法，用来显示信息。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">最简单的方法是console.log()，可以用来取代alert()或document.write()。比如，在网页脚本中使用console.log("Hello World")，加载时控制台就会自动显示如下内容。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032601.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">另外，根据信息的不同性质，console对象还有4种显示信息的方法，分别是一般信息console.info()、除错信息console.debug()、警告提示console.warn()、错误提示console.error()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，在网页脚本中插入下面四行：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.info("这是info");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.debug("这是debug");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.warn("这是warn");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.error("这是error");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">加载时，控制台会显示如下内容。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032602.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">可以看到，不同性质的信息前面有不同的图标，并且每条信息后面都有超级链接，点击后跳转到网页源码的相应行。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>二、占位符</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console对象的上面5种方法，都可以使用printf风格的占位符。不过，占位符的种类比较少，只支持字符（%s）、整数（%d或%i）、浮点数（%f）和对象（%o）四种。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("%d年%d月%d日",2011,3,26);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("圆周率是%f",3.1415926);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032603.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">%o占位符，可以用来查看一个对象内部情况。比如，有这样一个对象：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var dog = {} ;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.name = "大毛" ;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.color = "黄色";</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，对它使用o%占位符。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("%o",dog);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032604.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>三、分组显示</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">如果信息太多，可以分组显示，用到的方法是console.group()和console.groupEnd()。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.group("第一组信息");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第一组第一条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第一组第二条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.groupEnd();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.group("第二组信息");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第二组第一条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第二组第二条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.groupEnd();</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032605.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">点击组标题，该组信息会折叠或展开。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032606.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>四、console.dir()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.dir()可以显示一个对象所有的属性和方法。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，现在为第二节的dog对象，添加一个bark()方法。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.bark = function(){alert("汪汪汪");};</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，显示该对象的内容，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.dir(dog);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032607.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>五、console.dirxml()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.dirxml()用来显示网页的某个节点（node）所包含的html/xml代码。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，先获取一个表格节点，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var table = document.getElementById("table1");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，显示该节点包含的代码。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.dirxml(table);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032608.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>六、console.assert()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.assert()用来判断一个表达式或变量是否为真。如果结果为否，则在控制台输出一条相应信息，并且抛出一个异常。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，下面两个判断的结果都为否。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var result = 0;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.assert( result );</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var year = 2000;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.assert(year == 2011 );</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032609.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>七、console.trace()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.trace()用来追踪函数的调用轨迹。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，有一个加法器函数。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add(a,b){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　return a+b;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">我想知道这个函数是如何被调用的，在其中加入console.trace()方法就可以了。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add(a,b){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.trace();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　return a+b;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">假定这个函数的调用代码如下：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var x = add3(1,1);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add3(a,b){return add2(a,b);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add2(a,b){return add1(a,b);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add1(a,b){return add(a,b);}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">运行后，会显示add()的调用轨迹，从上到下依次为add()、add1()、add2()、add3()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032610.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>八、计时功能</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.time()和console.timeEnd()，用来显示代码的运行时间。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.time("计时器一");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　for(var i=0;i&lt;1000;i++){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var j=0;j&lt;1000;j++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.timeEnd("计时器一");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032611.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>九、性能分析</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">性能分析（Profiler）就是分析程序各个部分的运行时间，找出瓶颈所在，使用的方法是console.profile()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">假定有一个函数Foo()，里面调用了另外两个函数funcA()和funcB()，其中funcA()调用10次，funcB()调用1次。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function Foo(){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;10;i++){funcA(1000);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　funcB(10000);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function funcA(count){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;count;i++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function funcB(count){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;count;i++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，就可以分析Foo()的运行性能了。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.profile('性能分析器一');</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　Foo();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.profileEnd();</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">控制台会显示一张性能分析表，如下图。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032612.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">标题栏提示，一共运行了12个函数，共耗时2.656毫秒。其中funcA()运行10次，耗时1.391毫秒，最短运行时间0.123毫秒，最长0.284毫秒，平均0.139毫秒；funcB()运行1次，耗时1.229ms毫秒。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">除了使用console.profile()方法，firebug还提供了一个"概况"（Profiler）按钮。第一次点击该按钮，"性能分析" 开始，你可以对网页进行某种操作（比如ajax操作），然后第二次点击该按钮，"性能分析"结束，该操作引发的所有运算就会进行性能分析。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032613.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>十、属性菜单</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">控制台面板的名称后面，有一个倒三角，点击后会显示属性菜单。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032614.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">默认情况下，控制台只显示Javascript错误。如果选中Javascript警告、CSS错误、XML错误都送上，则相关的提示信息都会显示。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">这里比较有用的是"显示XMLHttpRequests"，也就是显示ajax请求。选中以后，网页的所有ajax请求，都会在控制台面板显示出来。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，点击一个<a href="http://developer.yahoo.com/yui/examples/datatable/dt_xhrlocalxml.html" target="_blank" style="color: #1a356e; text-decoration: initial;">YUI示例</a>，控制台就会告诉我们，它用ajax方式发出了一个GET请求，http请求和响应的头信息和内容主体，也都可以看到。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032615.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>[参考文献]</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">*&nbsp;<a href="http://michaelsync.net/2007/09/09/firebug-tutorial-logging-profiling-and-commandline-part-i" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug Tutorial - Logging, Profiling and CommandLine (Part I)</a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">*&nbsp;<a href="http://michaelsync.net/2007/09/10/firebug-tutorial-logging-profiling-and-commandline-part-ii" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug Tutorial - Logging, Profiling and CommandLine (Part II)</a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">（完）</p><img src ="http://www.blogjava.net/zhaochengming/aggbug/395606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-02-22 19:40 <a href="http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Extjs4应用中使用Ext.Loader</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jul 2011 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355233.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355233.html</trackback:ping><description><![CDATA[<div><div><p>在EXTJS官网看到一片文章，讲的是Extjs.Loader的使用方法，文章非常详细的介绍了 Loader的机制及用法，感觉非常不错，但无奈英文实在太烂，就没转过来。昨天恰好在CSDN看到了这篇文章的译文，而译文的质量非常高，对译者的翻译 水平怎一个羡慕了得。废话不多说，正文开始。</p> <p>在开始之前，将英文原文链接放上来，英文水平高的可以看看原文哦。</p> <p>链接地址：<a target="_blank" href="http://www.sencha.com/blog/using-ext-loader-for-your-application/">www.sencha.com/blog/using-ext-loader-for-your-application/</a></p> <p>ExtJS 4.0是一个使用新的依赖系统的类加载系统。这两个强大的新功能允许你创建大量允许浏览器按需下载脚本代码的应用。</p> <p>今天，我们将通过建立一个小的使用新的类加载系统的应用程序来熟悉一下依赖管理系统。同时，我们将讨论Ext加载系统的各种配置项。</p> <p>在开始之前，我们先来看看将要实现的结果。这样做，可使我们确定需要扩展那些类。</p> <p><img alt="001" src="http://mhzg.net/upload/2011/6/30102044116.jpg" height="415" width="580" /></p> <p>应用会包括互相绑定的GridPanel和FormPanel，名称分别为UserGridPanel和UserFormPanel。 UserGridPanel的操作需要创建一个模型和Store。UserGridPanel和UserFormPanel将被渲染到一个名称为 UserEditorWindow的窗口，它扩张自ExtJS的Window类。所有这些类都会在命名空间MyApp下。</p> <p>在开始编码前，首先要确定目录结构，以下是使用命名空间组织的文件夹：</p> <p><img alt="002" src="http://mhzg.net/upload/2011/6/3010204684.jpg" height="246" width="269" /></p> <p>从上图可以看到，MyApp目录已经按照命名空间进拆分成几个目录。在完成开发的时候，我们的应用将会有一个如下图所示的内部依赖运行模型。</p> <p>（<span style="font-family: 宋体; color: #ff0000">尽管应用的目录构成很象ExtJS 4 MVC架构，事实上示例并没有使用它 </span>）</p> <p><img style="width: 600px;" alt="003" src="http://mhzg.net/upload/2011/6/30102047506.jpg" height="356" width="635" /></p> <p>现在开始编写index.html文件，这里需要包含应用需要的启动文件和应用的根文件(app.js)。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01//EN"&nbsp;"http://www.w3.org/TR/html4/strict.dtd"&gt; </span></li><li>&lt;html&gt; </li><li>&lt;head&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Ext&nbsp;4&nbsp;Loader&lt;/title&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;&nbsp;href="js/ext-4.0.1/resources/css/ext-all.css"&nbsp;/&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="js/ext-4.0.1/ext-debug.js"&gt;&lt;/script&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="js/MyApp/app.js"&gt;&lt;/script&gt; </li><li>&lt;/head&gt; </li><li>&lt;body&gt; </li><li>&lt;/body&gt; </li><li>&lt;/html&gt;</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>index.html文件中需要使用link标记包含ExtJS 4的样式文件。包含ext-debug.js文件的javascript标记可能要修改多次，ext-all-debug.js文件是开发调试用的，而ext-all.js则是在发布产品时使用的。</p> <p>这里有几个选择，每个选择都有优缺点。</p> <p>以下是这些文件的说明：</p> <p>ext-all-debug-w-comments.js：带注释的的完整调试版本。文件比较大，加载时间比较长。</p> <p>ext-all-debug.js : 不带注释的完整调试版本。文件也比较大，但很适合调试。</p> <p>ext-all.js ；压缩后的完整版本，文件比较小。使用该版本调试很困难，因此一般在发布产品时才使用。</p> <p>ext-debug.js ： 该文件只包含ExtJS基础架构和空的结构。使用该文件，可以实现ExtJS类文件的远程加载，而且提供了很好的调试体验，不过代价是相当的慢。</p> <p>ext.js : ext-debug.js的压缩版本。</p> <p>我们的index.html将使用ext-debug.js文件，这是实现动态加载所需的最低要求。最后，我们将展示如何使用ext-all版本获取最好的结果。</p> <p>由于UserGridPanel 类要求模型和Store，因而，要先定义编写这些支持类。现在开始编写模型和Store：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.models.UserModel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.data.Model', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;fields&nbsp;&nbsp;&nbsp;:&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'firstName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'lastName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'dob', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'userName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;] </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>以上代码扩展自Ext.data.Model，将创建UserModel 类。因为扩展自Ext.data.Model类，ExtJS会自动加载它，并在它加载后创建UserModel类。</p> <p>下一步，要创建扩展自Ext.data.Store的UserStore 类：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.stores.UserStore',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.data.Store', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;singleton&nbsp;:&nbsp;true, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;&nbsp;:&nbsp;['MyApp.models.UserModel'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;model&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'MyApp.models.UserModel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(arguments); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.loadData([ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Louis', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Dobbs', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'12/21/34', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'ldobbs'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Sam', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Hart', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'03/23/54', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'shart'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Nancy', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Garcia', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'01/18/24', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'ngarcia'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>当创建单件模式的UserStore 时，需要在UserStore原型添加一个requires关键字，它会在类实例化前，为ExtJS提供一个类的请求列表。在这个示例，列表中只有UserModel 一个请求类。</p> <p>（实际上， 在Store的原型中定义了model为UserModel 类，ExtJS就会自动加载它。在requires关键字中列出的目的，是希望你的代码能自文档化（self-documenting），从而提醒你，UserModel 类是必须的 ）</p> <p>好了，UserGridPanel视图需要的基类已经创建了，现在可以创建UserGridPanel类了：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UsersGridPanel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.grid.Panel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'widget.UsersGridPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;:&nbsp;['MyApp.stores.UserStore'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.store&nbsp;&nbsp;&nbsp;=&nbsp;MyApp.stores.UserStore; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.columns&nbsp;=&nbsp;this.buildColumns(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildColumns&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'First&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'firstName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Last&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'lastName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'DOB', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'dob', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Login', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'userName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>在上面代码中，要注意requires 关键字，看它是怎么增加UserStore 为请求类的。刚才，我们为GridPanel扩展和Store扩展配置了一个直接的依赖关系。</p> <p>下一步，我们要创建FormPanel扩展：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UserFormPanel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.form.Panel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'widget.UserFormPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;bodyStyle&nbsp;&nbsp;&nbsp;:&nbsp;'padding:&nbsp;10px;&nbsp;background-color:&nbsp;#DCE5F0;'&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;'&nbsp;border-left:&nbsp;none;', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;defaultType&nbsp;:&nbsp;'textfield', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anchor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'-10', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelWidth&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.items&nbsp;=&nbsp;this.buildItems(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildItems&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'First&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'firstName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'Last&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'lastName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'DOB', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'dob'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'User&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'userName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>因为UserForm 不需要从服务器端请求任何类，因而不需要添加requires定义。</p> <p>应用快完成了，现在需要创建UserEditorWindow类和运行应用的app.js。以下是UserEditorWindow类的代码。因为要将Grid和表单绑定在一起，因而类代码有点长，请见谅：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UserEditorWindow',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.Window', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;:&nbsp;['MyApp.views.UsersGridPanel','MyApp.views.UserFormPanel'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;:&nbsp;200, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;:&nbsp;550, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;border&nbsp;:&nbsp;false, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;layout&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;&nbsp;:&nbsp;'hbox', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align&nbsp;:&nbsp;'stretch'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.items&nbsp;&nbsp;&nbsp;=&nbsp;this.buildItems(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.buttons&nbsp;=&nbsp;this.buildButtons(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.on('afterrender',&nbsp;this.onAfterRenderLoadForm,&nbsp;this); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildItems&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'UsersGridPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;280, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemId&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'userGrid', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listeners&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemclick&nbsp;:&nbsp;this.onGridItemClick </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xtype&nbsp;&nbsp;:&nbsp;'UserFormPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemId&nbsp;:&nbsp;'userForm', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex&nbsp;&nbsp;&nbsp;:&nbsp;1 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildButtons&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Save', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;this.onSaveBtn </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'New', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;this.onNewBtn </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onGridItemClick&nbsp;:&nbsp;function(view,&nbsp;record)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;formPanel&nbsp;=&nbsp;this.getComponent('userForm'); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel.loadRecord(record) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onSaveBtn&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;gridPanel&nbsp;&nbsp;=&nbsp;this.getComponent('userGrid'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridStore&nbsp;&nbsp;=&nbsp;gridPanel.getStore(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel&nbsp;&nbsp;=&nbsp;this.getComponent('userForm'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basicForm&nbsp;&nbsp;=&nbsp;formPanel.getForm(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec&nbsp;=&nbsp;basicForm.getRecord(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formData&nbsp;&nbsp;&nbsp;=&nbsp;basicForm.getValues(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;storeIndex&nbsp;=&nbsp;gridStore.indexOf(currentRec), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//loop&nbsp;through&nbsp;the&nbsp;record&nbsp;and&nbsp;set&nbsp;values </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.beginEdit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(key&nbsp;in&nbsp;formData)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.set(key,&nbsp;formData[key]); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.endEdit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.commit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;and&nbsp;select </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(storeIndex&nbsp;==&nbsp;-1)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridStore.add(currentRec); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridPanel.getSelectionModel().select(currentRec) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onNewBtn&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;gridPanel&nbsp;=&nbsp;this.getComponent('userGrid'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel&nbsp;=&nbsp;this.getComponent('userForm'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newModel&nbsp;&nbsp;=&nbsp;Ext.ModelManager.create({},&nbsp; </li><li>&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;'MyApp.models.UserModel'); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridPanel.getSelectionModel().clearSelections(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel.getForm().loadRecord(newModel) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onAfterRenderLoadForm&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.onNewBtn(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>UserEditorWindow 的代码包含了许多东西用来管理UserGridPanel和UserFormPanel类的整个绑定的声明周期。为了指示ExtJS在创建该类前加载这两个类，必须在requires列表里列出它们。</p> <p>现在完成最后一个文件app.js。为了最大限度地提高我们的学习，将有3次修改要做。首先从最简单配置开始，然后逐步添加。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.Loader.setPath('MyApp',&nbsp;'js/MyApp'); </span></li><li>Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>首先，app.js会在ExtJS添加MyApp命名空间的路径，这可通过调用Ext.loader.setPath方法实现，方法的第1个参数是命名空间，然后是加载文件与页面的相对路径。</p> <p>下一步，调用Ext.OnReady方法，传递一个包含Ext.create的匿名函数。Ext.create会在ExtJS  4.0初始化之后执行，以字符串形式传递的UserEditorWindow  类会被实例化。因为不需要指向实例和希望立即显示它，因而在后面串接了show方法的调用。</p> <p>如果你打开这个页面（<a href="http://moduscreate.com/senchaarticles/01/pass1.html">http://moduscreate.com/senchaarticles/01/pass1.html</a> ），你会看到UI渲染，但很慢，并且ExtJS会在Firebug中显示以下警告信息：</p> <p><img alt="004" src="http://mhzg.net/upload/2011/6/30103430116.jpg" height="54" width="543" /></p> <p>ExtJS提示我们没有使用加载系统最优化的方式。这是第二步要讨论的问题。然后，这是一个好的学习机会，要好好理由。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 我们需要配置Firebug在控制台中显示XHR请求，以便在控制台中看到所有请求，而不需要切换到网络面板。这样，我们不单可以观察到类依赖系统的工作情况，还可以从所有ExtJS类加载的文件中通过过滤方式找到我们要求这样的文件。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在Firebug控制台过滤输入框中输入&#8220;User&#8221;，你会看到下图所示的结果。</p> <p><img style="width: 600px;" alt="005" src="http://mhzg.net/upload/2011/6/30103431569.jpg" height="177" width="636" />从图中可以看到，UserEditorWindow类第一个被加载，接着请求UserGridPanel。UserGridPanel 要求UserStore和UserModel类。最后加载UserFormPanel 类。</p> <p>我刚才提到，ExtJS提示了我们没有使用加载系统最优化的方式。这是因为依赖是在Ext.OnReady触发加载之后通过同步XHR请求确定的，而这不是有效的方式且难于调试。</p> <p>未来修正这个问题，可以修改app.js指示ExtJS先加载我们定义的类，这样即可提供性能又便于调试：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.Loader.setPath('MyApp',&nbsp;'js/MyApp'); </span></li><li>Ext.require('MyApp.views.UserEditorWindow'); </li><li>Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>为了快速加载我们定义的类和避免调试信息，可简单的在Ext.onReady前调用Ext.require，只是ExtJS请求 UserEditorWindow类。这将会让ExtJS在文档HEAD标记内注入一个script标记，运行资源在Ext.OnReady前加载。</p> <p>查看<a href="http://moduscreate.com/senchaarticles/01/pass2.html">http://moduscreate.com/senchaarticles/01/pass2.html</a> 可看到它是如何工作地。在页面加载后，你会注意到ExtJS没有在控制台显示警告信息了。</p> <p>我们所做的是让ExtJS框架和应用类延迟加载。虽然这样做调试很好，但是对于需要快速调试的情况，页面渲染时间会让你感到痛苦。为什么？</p> <p>原因很简单，因为这需要加载许多资源文件。在示例中，ExtJS发送了193个Javascript资源请求到web服务器，还有部分是在缓存中的：</p> <p><img style="width: 600px;" alt="006" src="http://mhzg.net/upload/2011/6/30103433569.jpg" height="283" width="636" /></p> <p>我们创建了6个Javascript文件（5个类文件和app.js），这意味着加载要求的ExtJS文件有187个请求。当你在本地做开发的时候，这个方案可行，但不是最理想的和效果最好的。</p> <p>解决这个问题，我们可以使用折中方案，通过ext-all-debug加载ExtJS框架，动态加载我们的类文件。要实现这个，需要修改两个文件。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>&lt;script&nbsp;type="text/javascript"&nbsp;&nbsp;src="js/ext-4.0.1/ext-all-debug.js"&gt;&lt;/script&gt; </span></li></ol> </div>  <div contenteditable="false"> </div> </div> <p>首先，需要修改Index.html，使用ext-all-debug.js替换ext.debug.js。</p> <p>接着，修改app.js，开启Ext.Loader：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>(function()&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.Loader.setConfig({ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enabled&nbsp;:&nbsp;true, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths&nbsp;&nbsp;&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyApp&nbsp;:&nbsp;'js/MyApp'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}); </li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.require('MyApp.views.UserEditorWindow'); </li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}); </li><li>})();</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>通过调用Loader.setConfig可开启Ext.Loader，需要传递一个匿名对象，它的eanbled属性设置为true，而命名空间设置为路径映射。</p> <p>通过编辑app.js，在本地开发环境下，应用将会在1秒内完成加载和渲染。</p> <p><img style="width: 600px;" alt="007" src="http://mhzg.net/upload/2011/6/30103436116.png" height="166" width="713" /></p> <p>源代码下载地址：<a title="http://moduscreate.com/senchaarticles/01/files.zip" href="http://moduscreate.com/senchaarticles/01/files.zip">http://moduscreate.com/senchaarticles/01/files.zip</a></p> <p>译文链接地址：<a target="_blank" href="http://blog.csdn.net/tianxiaode/archive/2011/06/28/6571589.aspx">blog.csdn.net/tianxiaode/archive/2011/06/28/6571589.aspx</a></p> </div></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/355233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-28 15:46 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs xtype一览</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jul 2011 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355230.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355230.html</trackback:ping><description><![CDATA[<div><table align="center" border="1" cellpadding="2" width="750"><tbody><tr><td colspan="3"><strong>基本组件：</strong></td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>button</td> <td>Ext.Button</td> <td>按钮</td> </tr> <tr> <td>splitbutton</td> <td>Ext.SplitButton</td> <td>带下拉菜单的按钮</td> </tr> <tr> <td>cycle</td> <td>Ext.CycleButton</td> <td>带下拉选项菜单的按钮</td> </tr> <tr> <td>buttongroup</td> <td>Ext.ButtonGroup</td> <td>编组按钮(Since 3.0)</td> </tr> <tr> <td>slider</td> <td>Ext.Slider</td> <td>滑动条</td> </tr> <tr> <td>progress</td> <td>Ext.ProgressBar</td> <td>进度条</td> </tr> <tr> <td>statusbar</td> <td>Ext.StatusBar</td> <td>状态条，2.2加进来，3.0 又去了</td> </tr> <tr> <td>colorpalette</td> <td>Ext.ColorPalette</td> <td>调色板</td> </tr> <tr> <td>datepicker</td> <td>Ext.DatePicker</td> <td>日期选择面板</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">容器及数据类组件</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td style="color: black;">xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>window</td> <td>Ext.Window</td> <td>窗口</td> </tr> <tr> <td>viewport</td> <td>Ext.ViewPort</td> <td>视口，即浏览器的视口，能随之伸缩</td> </tr> <tr> <td>box</td> <td>Ext.BoxComponent</td> <td>盒子组件，相当于一个 &lt;div&gt;</td> </tr> <tr> <td>component</td> <td>Ext.Component</td> <td>组件</td> </tr> <tr> <td>container</td> <td>Ext.Container</td> <td>容器</td> </tr> <tr> <td>panel</td> <td>Ext.Panel</td> <td>面板</td> </tr> <tr> <td>tabpanel</td> <td>Ext.TabPanel</td> <td>选项面板</td> </tr> <tr> <td>treepanel</td> <td>Ext.tree.TreePanel</td> <td>树型面板</td> </tr> <tr> <td>flash</td> <td>Ext.FlashComponent</td> <td>显示 Flash 的组件(Since 3.0)</td> </tr> <tr> <td>grid</td> <td>Ext.grid.GridPanel</td> <td>表格</td> </tr> <tr> <td>editorgrid</td> <td>Ext.grid.EditorGridPanel</td> <td>可编辑的表格</td> </tr> <tr> <td>propertygrid</td> <td>Ext.grid.PropertyGrid</td> <td>属性表格</td> </tr> <tr> <td>editor</td> <td>Ext.Editor</td> <td>编辑器</td> </tr> <tr> <td>dataview</td> <td>Ext.DataView</td> <td>数据显示视图</td> </tr> <tr> <td>listview</td> <td>Ext.ListView</td> <td>列表视图</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">工具栏组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>paging</td> <td>Ext.PagingToolbar</td> <td>分页工具条</td> </tr> <tr> <td>toolbar</td> <td>Ext.Toolbar</td> <td>工具栏</td> </tr> <tr> <td>tbbutton</td> <td>Ext.Toolbar.Button</td> <td>工具栏按钮</td> </tr> <tr> <td>tbfill</td> <td>Ext.Toolbar.Fill</td> <td>工具栏填充区</td> </tr> <tr> <td>tbitem</td> <td>Ext.Toolbar.Item</td> <td>工具条项目</td> </tr> <tr> <td>tbseparator</td> <td>Ext.Toolbar.Separator</td> <td>工具栏分隔符</td> </tr> <tr> <td>tbspacer</td> <td>Ext.Toolbar.Spacer</td> <td>工具栏空白</td> </tr> <tr> <td>tbsplit</td> <td>Ext.Toolbar.SplitButton</td> <td>工具栏分隔按钮</td> </tr> <tr> <td>tbtext</td> <td>Ext.Toolbar.TextItem</td> <td>工具栏文本项</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">菜单组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>menu</td> <td>Ext.menu.Menu</td> <td>菜单</td> </tr> <tr> <td>colormenu</td> <td>Ext.menu.ColorMenu</td> <td>颜色选择菜单</td> </tr> <tr> <td>datemenu</td> <td>Ext.menu.DateMenu</td> <td>日期选择菜单</td> </tr> <tr> <td>menubaseitem</td> <td>BaseItem</td> <td>&nbsp;</td> </tr> <tr> <td>menucheckitem</td> <td>Ext.menu.CheckItem</td> <td>选项菜单项</td> </tr> <tr> <td>menuitem</td> <td>Ext.menu.Item</td> <td>&nbsp;</td> </tr> <tr> <td>menuseparator</td> <td>Ext.menu.Separator</td> <td>菜单分隔线</td> </tr> <tr> <td>menutextitem</td> <td>Ext.menu.TextItem</td> <td>文本菜单项</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">表单及表单域组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>form</td> <td>Ext.FormPanel/Ext.form.FormPanel</td> <td>表单面板</td> </tr> <tr> <td>checkbox</td> <td>Ext.form.Checkbox</td> <td>多选框</td> </tr> <tr> <td>combo</td> <td>Ext.form.ComboBox</td> <td>下拉框</td> </tr> <tr> <td>datefield</td> <td>Ext.form.DateField</td> <td>日期选择项</td> </tr> <tr> <td>timefield</td> <td>Ext.form.TimeField</td> <td>时间录入项</td> </tr> <tr> <td>field</td> <td>Ext.form.Field</td> <td>表单字段</td> </tr> <tr> <td>fieldset</td> <td>Ext.form.FieldSet</td> <td>表单字段组</td> </tr> <tr> <td>hidden</td> <td>Ext.form.Hidden</td> <td>表单隐藏域</td> </tr> <tr> <td>htmleditor</td> <td>Ext.form.HtmlEditor</td> <td>HTML 编辑器</td> </tr> <tr> <td>label</td> <td>Ext.form.Label</td> <td>标签</td> </tr> <tr> <td>numberfield</td> <td>Ext.form.NumberField</td> <td>数字编辑器</td> </tr> <tr> <td>radio</td> <td>Ext.form.Radio</td> <td>单选按钮</td> </tr> <tr> <td>textarea</td> <td>Ext.form.TextArea</td> <td>多行文本框</td> </tr> <tr> <td>textfield</td> <td>Ext.form.TextField</td> <td>表单文本框</td> </tr> <tr> <td>trigger</td> <td>Ext.form.TriggerField</td> <td>触发录入项</td> </tr> <tr> <td>checkboxgroup</td> <td>Ext.form.CheckboxGroup</td> <td>编组的多选框(Since 2.2)</td> </tr> <tr> <td>displayfield</td> <td>Ext.form.DisplayField</td> <td>仅显示，不校验/不被提交的文本框</td> </tr> <tr> <td>radiogroup</td> <td>Ext.form.RadioGroup</td> <td>编组的单选按钮(Since 2.2)</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">图表组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>chart</td> <td>Ext.chart.Chart</td> <td>图表组件</td> </tr> <tr> <td>barchart</td> <td>Ext.chart.BarChart</td> <td>柱状图</td> </tr> <tr> <td>cartsianchart</td> <td>Ext.chart.CartesianChart</td> <td>&nbsp;</td> </tr> <tr> <td>columnchart</td> <td>Ext.chart.ColumnChart</td> <td>&nbsp;</td> </tr> <tr> <td>linechart</td> <td>Ext.chart.LineChart</td> <td>连线图</td> </tr> <tr> <td>piechart</td> <td>Ext.chart.PieChart</td> <td>扇形图</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">数据集 Store：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>arraystore</td> <td>Ext.data.ArrayStore</td> <td>&nbsp;</td> </tr> <tr> <td>directstore</td> <td>Ext.data.DirectStore</td> <td>&nbsp;</td> </tr> <tr> <td>groupingstore</td> <td>Ext.data.GroupingStore</td> <td>&nbsp;</td> </tr> <tr> <td>jsonstore</td> <td>Ext.data.JsonStore</td> <td>&nbsp;</td> </tr> <tr> <td>simplestore</td> <td>Ext.data.SimpleStore</td> <td>&nbsp;</td> </tr> <tr> <td>store</td> <td>Ext.data.Store</td> <td>&nbsp;</td> </tr> <tr> <td>xmlstore</td> <td>Ext.data.XmlStore</td> <td>&nbsp;</td></tr></tbody></table></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/355230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-28 15:37 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML处理特殊字符</title><link>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339585.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 02 Dec 2010 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339585.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/339585.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/339585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/339585.html</trackback:ping><description><![CDATA[<p>在使用xml文件时，有时候内容中会含有一些特殊字符，导致在解析xml的时候出现异常。</p>
<p style="text-indent: 2em">解析数据</p>
<p style="text-indent: 2em">XML 解析器通常情况下会处理XML文档中的所有文本。</p>
<p style="text-indent: 2em">当XML元素被解析的时候，XML元素内部的文本也会被解析。</p>
<pre>    如果文本中含有&#8220;&lt;&#8221;，&#8220;&gt;&#8221;等特殊的字符时将会出现异常。（当含有&#8220;＝&#8221;时，DataSet.ReadXml也会出现异常）。</pre>
<pre>    一种解决方法是：用实体&amp;来表示。</pre>
<pre>
<p>下面是五个在XML文档中预定义好的实体:</p>
<table border="1" cellspacing="0" width="50%">
    <tbody>
        <tr>
            <td width="39%">&amp;lt;</td>
            <td width="17%">&lt;</td>
            <td width="44%">小于号</td>
        </tr>
        <tr>
            <td>&amp;gt;</td>
            <td>&gt;</td>
            <td>大于号</td>
        </tr>
        <tr>
            <td>&amp;amp;</td>
            <td>&amp;</td>
            <td>和</td>
        </tr>
        <tr>
            <td>&amp;apos;</td>
            <td>'</td>
            <td>单引号</td>
        </tr>
        <tr>
            <td>&amp;quot;</td>
            <td>"</td>
            <td>双引号</td>
        </tr>
    </tbody>
</table>
</pre>
<pre>另一种解决方法是使用CDATA部件：</pre>
<pre>
<p>一个 CDATA 部件以"<strong><font color="#ff0000">&lt;![CDATA[</font></strong>" 标记开始，以"<strong><font color="#ff0000">]]&gt;</font></strong>"标记结束</p>
<p style="text-indent: 2em">所有在CDATA部件之间的文本都会被解析器忽略。</p>
<p style="text-indent: 2em">CDATA注意事项:</p>
<p style="text-indent: 2em">CDATA部件之间不能再包含CDATA部件（不能嵌套）。如果CDATA部件包含了字符"]]&gt;" 或者"&lt;![CDATA[" ，将很有可能出错。</p>
<p style="text-indent: 2em">同样要注意在字符串"]]&gt;"之间没有空格或者换行符。</p>
</pre>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/339585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-12-02 11:14 <a href="http://www.blogjava.net/zhaochengming/archive/2010/12/02/339585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML处理特殊字符</title><link>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339586.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 02 Dec 2010 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339586.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/339586.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/12/02/339586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/339586.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/339586.html</trackback:ping><description><![CDATA[<p>在使用xml文件时，有时候内容中会含有一些特殊字符，导致在解析xml的时候出现异常。</p>
<p style="text-indent: 2em">解析数据</p>
<p style="text-indent: 2em">XML 解析器通常情况下会处理XML文档中的所有文本。</p>
<p style="text-indent: 2em">当XML元素被解析的时候，XML元素内部的文本也会被解析。</p>
<pre>    如果文本中含有&#8220;&lt;&#8221;，&#8220;&gt;&#8221;等特殊的字符时将会出现异常。（当含有&#8220;＝&#8221;时，DataSet.ReadXml也会出现异常）。</pre>
<pre>    一种解决方法是：用实体&amp;来表示。</pre>
<pre>
<p>下面是五个在XML文档中预定义好的实体:</p>
<table border="1" cellspacing="0" width="50%">
    <tbody>
        <tr>
            <td width="39%">&amp;lt;</td>
            <td width="17%">&lt;</td>
            <td width="44%">小于号</td>
        </tr>
        <tr>
            <td>&amp;gt;</td>
            <td>&gt;</td>
            <td>大于号</td>
        </tr>
        <tr>
            <td>&amp;amp;</td>
            <td>&amp;</td>
            <td>和</td>
        </tr>
        <tr>
            <td>&amp;apos;</td>
            <td>'</td>
            <td>单引号</td>
        </tr>
        <tr>
            <td>&amp;quot;</td>
            <td>"</td>
            <td>双引号</td>
        </tr>
    </tbody>
</table>
</pre>
<pre>另一种解决方法是使用CDATA部件：</pre>
<pre>
<p>一个 CDATA 部件以"<strong><font color="#ff0000">&lt;![CDATA[</font></strong>" 标记开始，以"<strong><font color="#ff0000">]]&gt;</font></strong>"标记结束</p>
<p style="text-indent: 2em">所有在CDATA部件之间的文本都会被解析器忽略。</p>
<p style="text-indent: 2em">CDATA注意事项:</p>
<p style="text-indent: 2em">CDATA部件之间不能再包含CDATA部件（不能嵌套）。如果CDATA部件包含了字符"]]&gt;" 或者"&lt;![CDATA[" ，将很有可能出错。</p>
<p style="text-indent: 2em">同样要注意在字符串"]]&gt;"之间没有空格或者换行符。</p>
</pre>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/339586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-12-02 11:14 <a href="http://www.blogjava.net/zhaochengming/archive/2010/12/02/339586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript技巧合集 （转自http://ttyp.cnblogs.com/archive/2004/11/15/63900.html）</title><link>http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 09 Apr 2010 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/317837.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/317837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/317837.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 事件源对象     event.srcElement.tagName     event.srcElement.type    捕获释放     event.srcElement.setCapture();&nbsp;     event.srcElement.releaseCapture();&nbsp;     事件按键     event.keyCode   ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/317837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-04-09 13:01 <a href="http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上百个让你事半功倍的jquery插件(转)</title><link>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316517.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 25 Mar 2010 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316517.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/316517.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/316517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/316517.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上百个让你事半功倍的jquery插件2008年三月20日 由 贝贝爸 Leave a reply &#187; jQuery是一个了不起的javascript库，它可以是我们用很少的几句代码就可以创建出漂亮的页面效果。从网站的方面说，这使得javascript更加有趣。很多jquery爱好者开发了基于jquery的插件，在这里发现作者收集好多jquery的插件，转贴过来，给大家...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2010/03/25/316517.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/316517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-03-25 13:01 <a href="http://www.blogjava.net/zhaochengming/archive/2010/03/25/316517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>15个友好的jQuery提示框插件( 转)</title><link>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316516.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 25 Mar 2010 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316516.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/316516.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/03/25/316516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/316516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/316516.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>需要在用户把光标移到某个元素上时显示一些额外信息时，提示框是一种不错的方式，提示框会在鼠标停留的时候显示，鼠标移开时消失。</p>
<p>适当的使用提示框能大大提升网站的友好度，并且可以节省一些不必要的网页空间，今天我们将看到15款制作友好的提示框的jQuery插件。</p>
<h3>1. <a title="qTip" href="http://craigsworks.com/projects/qtip/" target="_blank">qTip</a></h3>
<p>qTip是一款功能高级的提示框插件，它提供了非常多的特性，包括圆角框、提示泡泡等。<br />
<img class="alignnone size-full wp-image-584" title="qtip" alt="qtip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/qtip.png" width="500" height="113" /></p>
<h3>2. <a title="jQuery Tools/Tooltips" href="http://flowplayer.org/tools/tooltip.html" target="_blank">jQuery Tools/Tooltips</a></h3>
<p>这个提示框插件能够显示任何的HTML元素，比如链接、表格、表单、图片，实现这些效果是很轻松的，你也可以轻松制作出自己独特风格的提示框。<img class="alignnone size-full wp-image-585" title="jquery-tools-tooltips" alt="jquery-tools-tooltips" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/jquery-tools-tooltips.png" width="500" height="132" /></p>
<h3>3. <a title="Simpletip" href="http://craigsworks.com/projects/simpletip/" target="_blank">Simpletip</a></h3>
<p>Simpletip 允许你通过Jquery的元素选择器和事件管理器轻松在任何元素上制作提示框，提示框可以使静态的、动态的、甚至可以通过ajax加载，并且都有非常多不懂的显示效果。</p>
<p><img class="alignnone size-full wp-image-586" title="simpletip" alt="simpletip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/simpletip.png" width="343" height="129" /></p>
<h3>4. <a title="jQuery (mb)Tooltip" href="http://pupunzi.wordpress.com/2009/02/07/mbtooltip/" target="_blank">jQuery (mb)Tooltip</a></h3>
<p>jQuery (mb)Tooltip是一款通过 jQuery timers 和半透明阴影插件实现的漂亮的提示框插件，它为各种需求提供很多可选项。</p>
<p>5. <a title="EZPZ Tooltip" href="http://theezpzway.com/2009/3/17/jquery-plugin-ezpz-tooltip" target="_blank">EZPZ Tooltip</a></p>
<p>你不需要添加任何CSS或图片就可以扩展、定制提示框的样式风格。</p>
<p><img class="alignnone size-full wp-image-587" title="ezpz-tooltip" alt="ezpz-tooltip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/ezpz-tooltip.png" width="500" height="139" /></p>
<h3>6.<a title="jQuery Input Floating Hint Box" href="http://nicolae.namolovan.googlepages.com/jquery.inputHintBox.html" target="_blank"> jQuery Input Floating Hint Box</a></h3>
<p>这个插件在表单右边提供一个自动变化的提示框，当输入框获得焦点时它就会显示，失去焦点时就隐藏。<img class="alignnone size-full wp-image-588" title="iquery-input-floating-hint-box" alt="iquery-input-floating-hint-box" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/iquery-input-floating-hint-box.png" width="465" height="150" /></p>
<h3>7. <a title="HTML Tooltip" href="http://www.javascriptkit.com/script/script2/htmltooltip.shtml" target="_blank">HTML Tooltip</a></h3>
<p><img class="alignnone size-full wp-image-589" title="html-tooltip" alt="html-tooltip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/html-tooltip.png" width="481" height="111" /></p>
<h3>8. <a title="Orbital Tooltip" href="http://www.userfirstinteractive.com/2008/12/01/orbital-tooltip/" target="_blank">Orbital Tooltip</a></h3>
<p>你可以用 Orbital Tooltip在目标元素的360&#176;任何一个位置制作出一个提示框。 <img class="alignnone size-full wp-image-590" title="orbital-tooltip" alt="orbital-tooltip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/orbital-tooltip.png" width="500" height="178" /></p>
<h3>9. <a title="Tipsy" href="http://onehackoranother.com/projects/jquery/tipsy/" target="_blank">Tipsy</a></h3>
<p>Facebook风格的提示框插件。<br />
<img class="alignnone size-full wp-image-591" title="tipsy" alt="tipsy" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/tipsy.png" width="500" height="70" /></p>
<h3>10. <a title="clueTip" href="http://plugins.learningjquery.com/cluetip/" target="_blank">clueTip</a></h3>
<p><img class="alignnone size-full wp-image-592" title="cluetip" alt="cluetip" src="http://www.webdesignbooth.com/wp-content/uploads/2009/06/cluetip.png" width="500" height="125" /></p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/316516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-03-25 12:39 <a href="http://www.blogjava.net/zhaochengming/archive/2010/03/25/316516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>clientheight clientwidth offsetheight offsetwidth</title><link>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316029.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sat, 20 Mar 2010 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316029.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/316029.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/316029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/316029.html</trackback:ping><description><![CDATA[<div id="Description">
<p>div的样式如下：<strong><br />
width:300px;<br />
height:200px;<br />
padding:10px;<br />
border:10px solid #ccc;<br />
background:#eee;<br />
font-size:12px;<br />
<br />
<br />
<br />
则：<br />
<br />
IE6.0、FF1.06+：</strong><br />
clientWidth = width + padding = 300+10&#215;2 = 320<br />
clientHeight = height + padding = 200+10&#215;2 = 220<br />
offsetWidth = width + padding + border = 300+10&#215;2+10&#215;2= 340<br />
offsetHeight = height + padding + border = 200+10&#215;2+10&#215;2 = 240</p>
<p><strong>IE5.0/5.5：</strong><br />
clientWidth = width - border = 300-10&#215;2 = 280<br />
clientHeight = height - border = 200-10&#215;2 = 180<br />
offsetWidth = width = 300<br />
offsetHeight = height = 200</p>
</div>
 <img src ="http://www.blogjava.net/zhaochengming/aggbug/316029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-03-20 17:53 <a href="http://www.blogjava.net/zhaochengming/archive/2010/03/20/316029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>padding margin border 区别</title><link>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316028.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sat, 20 Mar 2010 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316028.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/316028.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2010/03/20/316028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/316028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/316028.html</trackback:ping><description><![CDATA[<div style="layout-grid:  15.6pt none" class="Section0">
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">边框属性<font face="Times New Roman">(border)</font><font face="宋体">用来设定一个元素的边线。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">边距属性<font face="Times New Roman">(margin)</font><font face="宋体">是用来设置一个元素所占空间的边缘到相邻元素之间的距离。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">间隙属性<font face="Times New Roman">(padding)</font><font face="宋体">是用来设置元素内容到元素边界的距离。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">这三个属性都属于<font face="Times New Roman">CSS</font><font face="宋体">中</font><font face="Times New Roman">box</font><font face="宋体">类型的属性。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">下面这个示意图，很形象地体现了三者之间的区别。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/zhaochengming/x.png" width="394" height="259" /></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">这里提供一张盒模型的<font face="Times New Roman">3D</font><font face="宋体">示意图，希望便于你的理解和记忆。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; line-height: 19.5pt; margin-top: 5pt; margin-bottom: 5pt; background: rgb(251,253,255)" class="p0"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/zhaochengming/0cc359412cf249f55d7055f5f73a9753.gif" width="500" height="400" /><span style="font-family: 'Times New Roman'; background: rgb(251,253,255); color: rgb(54,54,54); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<!--endfragment-->
 <img src ="http://www.blogjava.net/zhaochengming/aggbug/316028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2010-03-20 17:47 <a href="http://www.blogjava.net/zhaochengming/archive/2010/03/20/316028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript屏蔽按键 ( 转自:http://hi.baidu.com/shunxinyangkun/blog/item/7090911ba576f8d4ac6e7576.html )</title><link>http://www.blogjava.net/zhaochengming/archive/2008/10/08/233119.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 08 Oct 2008 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2008/10/08/233119.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/233119.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2008/10/08/233119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/233119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/233119.html</trackback:ping><description><![CDATA[&lt;html&gt; <br />
&lt;head&gt; <br />
&nbsp;&nbsp; &lt;meta http-equiv=<span style="color: #ff00ff"><font size="2">"Content-Type"</font></span> content=<span style="color: #ff00ff"><font size="2">"text/html; charset=gb2312"</font></span>&gt; <br />
&nbsp;&nbsp; &lt;noscript&gt;&lt;meta http-equiv=<span style="color: #ff00ff"><font size="2">"refresh"</font></span> content=<span style="color: #ff00ff"><font size="2">"0;url=about:noscript"</font></span>&gt;&lt;/noscript&gt; <br />
&nbsp;&nbsp; &lt;title&gt;屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键&lt;/title&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;script language=<span style="color: #ff00ff"><font size="2">"Javascript"</font></span>&gt;&lt;!-- <br />
&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 </span><br />
</font>&nbsp;&nbsp;<font size="2"><span style="color: #008000">//Author: meizz(梅花雨) 2002-6-18 </span><br />
<span style="color: #0000ff">function</span></font> document.oncontextmenu(){event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>;}<font size="2"><span style="color: #008000">//屏蔽鼠标右键 </span><br />
<span style="color: #0000ff">function</span></font> window.onhelp(){<span style="color: #0000ff"><font size="2">return</font></span> <span style="color: #0000ff"><font size="2">false</font></span>} <font size="2"><span style="color: #008000">//屏蔽F1帮助 </span><br />
<span style="color: #0000ff">function</span></font> document.onkeydown() <br />
{ <br />
&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> ((window.event.altKey)&amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((window.event.keyCode==37)||&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 Alt+ 方向键 &#8592; </span><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (window.event.keyCode==39)))&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 Alt+ 方向键 &#8594; </span><br />
</font>&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(<span style="color: #ff00ff"><font size="2">"不准你使用ALT+方向键前进或后退网页！"</font></span>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>; <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000"><font size="2">/* 注：这还不是真正地屏蔽 Alt+ 方向键， <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为 Alt+ 方向键弹出警告框时，按住 Alt 键不放， <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用鼠标点掉警告框，这种屏蔽方法就失效了。以后若 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有哪位高手有真正屏蔽 Alt 键的方法，请告知。*/</font></span> <br />
&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> ((event.keyCode==8)&nbsp;&nbsp; ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽退格删除键 </span><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (event.keyCode==116)||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 F5 刷新键 </span><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (event.ctrlKey &amp;&amp; event.keyCode==82)){ <font size="2"><span style="color: #008000">//Ctrl + R </span><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> (event.keyCode==122){event.keyCode=0;event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>;}&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽F11 </span><br />
</font>&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> (event.ctrlKey &amp;&amp; event.keyCode==78) event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>;&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 Ctrl+n </span><br />
</font>&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> (event.shiftKey &amp;&amp; event.keyCode==121)event.returnValue=<span style="color: #0000ff"><font size="2">false</font></span>;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 shift+F10 </span><br />
</font>&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> (window.event.srcElement.tagName == <span style="color: #ff00ff"><font size="2">"A"</font></span> &amp;&amp; window.event.shiftKey)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.event.returnValue = <span style="color: #0000ff"><font size="2">false</font></span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽 shift 加鼠标左键新开一网页 </span><br />
</font>&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">if</font></span> ((window.event.altKey)&amp;&amp;(window.event.keyCode==115))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"><span style="color: #008000">//屏蔽Alt+F4 </span><br />
</font>&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.showModelessDialog(<span style="color: #ff00ff"><font size="2">"about:blank"</font></span>,<span style="color: #ff00ff"><font size="2">""</font></span>,<span style="color: #ff00ff"><font size="2">"dialogWidth:1px;dialogheight:1px"</font></span>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><font size="2">return</font></span> <span style="color: #0000ff"><font size="2">false</font></span>; <br />
&nbsp;&nbsp; } <br />
} <br />
&lt;/script&gt; <br />
屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键 <br />
&lt;/body&gt; <br />
&lt;/html&gt; 
 <img src ="http://www.blogjava.net/zhaochengming/aggbug/233119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2008-10-08 13:10 <a href="http://www.blogjava.net/zhaochengming/archive/2008/10/08/233119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多语言注意点</title><link>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227959.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 09 Sep 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227959.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/227959.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/227959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/227959.html</trackback:ping><description><![CDATA[<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Jboss/Tomcat<span style="font-family: 宋体">中的</span>server.xml<span style="font-family: 宋体">中</span>&lt;Connector&gt;<span style="font-family: 宋体">中加入</span>URIEncoding="utf-8"</p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/227959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2008-09-09 15:14 <a href="http://www.blogjava.net/zhaochengming/archive/2008/09/09/227959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 获取屏幕及浏览器大小和坐标等</title><link>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227958.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 09 Sep 2008 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227958.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/227958.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2008/09/09/227958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/227958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/227958.html</trackback:ping><description><![CDATA[<p><font size="3">document.body.offsetHeight是获得&lt;body&gt;内的高度信息 <br />
转自：http://hi.baidu.com/collect_zero/blog/item/5fc3e8012686f8071d95838f.html<br />
<br />
<br />
window.screen.width是获取整个屏幕的高度信息，浏览器最大化的情况下是&#8221;1024&#8221; <br />
<br />
window.screen.width是获取整个屏幕去除任务栏后的高度信息，浏览器最大化的情况下是&#8221;1004&#8221; <br />
</font></p>
<p><font size="3"></font></p>
<p><font size="3">网页可见区域宽：document.body.clientWidth <br />
网页可见区域高：document.body.clientHeight <br />
网页可见区域宽：document.body.offsetWidth (包括边线的宽) <br />
网页可见区域高：document.body.offsetHeight (包括边线的宽) <br />
网页正文全文宽：document.body.scrollWidth <br />
网页正文全文高：document.body.scrollHeight <br />
网页被卷去的高：document.body.scrollTop <br />
网页被卷去的左：document.body.scrollLeft <br />
网页正文部分上：window.screenTop <br />
网页正文部分左：window.screenLeft <br />
屏幕分辨率的高：window.screen.height <br />
屏幕分辨率的宽：window.screen.width <br />
屏幕可用工作区高度：window.screen.availHeight <br />
屏幕可用工作区宽度：window.screen.availWidth</font></p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/227958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2008-09-09 15:13 <a href="http://www.blogjava.net/zhaochengming/archive/2008/09/09/227958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>html table 标题 不滚动</title><link>http://www.blogjava.net/zhaochengming/archive/2008/09/04/226835.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 04 Sep 2008 01:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2008/09/04/226835.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/226835.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2008/09/04/226835.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/226835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/226835.html</trackback:ping><description><![CDATA[<style type="text/css">
<!--  
body {  
background: #FFF;  
color: #000;  
font: normal normal 12px Verdana, Geneva, Arial, Helvetica, sans-serif;  
margin: 10px;  
padding: 0  
}  
table, td, a {  
color: #000;  
font: normal normal 12px Verdana, Geneva, Arial, Helvetica, sans-serif  
}  
.td  
{  
nowrap:&#8217;&#8217;true&#8217;&#8217;;  
}  
div.tableContainer {  
clear: both;  
border: 1px solid #963;  
height: 285px;  
overflow: auto;  
width: 100%;  
}  
/* WinIE 6.x needs to re-account for it&#8217;&#8217;s scrollbar. Give it some padding */  
\html div.tableContainer/* */ {  
padding: 0 16px 0 0  
}  
/* clean up for allowing display Opera 5.x/6.x and MacIE 5.x */  
html>body div.tableContainer {  
height: auto;  
padding: 0;  
width: 740px  
}  
/* Reset overflow value to hidden for all non-IE browsers. */  
/* Filter out Opera 5.x/6.x and MacIE 5.x */  
head:first-child+body div[class].tableContainer {  
height: 285px;  
overflow: hidden;  
width: 756px  
}  
/* define width of table. IE browsers only */  
/* if width is set to 100%, you can remove the width */  
/* property from div.tableContainer and have the div scale */  
div.tableContainer table {  
float: left;  
width: 100%  
}  
/* WinIE 6.x needs to re-account for padding. Give it a negative margin */  
\html div.tableContainer table/* */ {  
margin: 0 -16px 0 0  
}  
/* define width of table. Opera 5.x/6.x and MacIE 5.x */  
html>body div.tableContainer table {  
float: none;  
margin: 0;  
width: 740px  
}  
/* define width of table. Add 16px to width for scrollbar. */  
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */  
head:first-child+body div[class].tableContainer table {  
width: 756px  
}  
/* set table header to a fixed position. WinIE 6.x only */  
/* In WinIE 6.x, any element with a position property set to relative and is a child of */  
/* an element that has an overflow property set, the relative value translates into fixed. */  
/* Ex: parent element DIV with a class of tableContainer has an overflow property set to auto */  
thead.fixedHeader tr {  
position: relative;  
/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */  
top: expression(document.getElementById("tableContainer").scrollTop)  
}  
thead.fixedHeader2 tr {  
position: relative;  
/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */  
bottom: expression(document.getElementById("tableContainer").scrollHeight > document.getElementById("tableContainer").clientHeight ? document.getElementById("tableContainer").scrollHeight - document.getElementById("tableContainer").scrollTop - document.getElementById("tableContainer").clientHeight :0)  
}  
/* set THEAD element to have block level attributes. All other non-IE browsers */  
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */  
/* Filter out Opera 5.x/6.x and MacIE 5.x */  
head:first-child+body thead[class].fixedHeader tr {  
display: block  
}  
/* make the TH elements pretty */  
thead.fixedHeader th {  
background: #C96;  
border-left: 1px solid #EB8;  
border-right: 1px solid #B74;  
border-top: 1px solid #EB8;  
font-weight: normal;  
padding: 4px 3px;  
text-align: center  
}  
/* make the TH elements pretty */  
thead.fixedHeader2 th {  
background: #C96;  
border-left: 1px solid #EB8;  
border-right: 1px solid #B74;  
border-top: 1px solid #EB8;  
font-weight: normal;  
padding: 4px 3px;  
text-align: left  
}  
/* make the A elements pretty. makes for nice clickable headers */  
thead.fixedHeader a, thead.fixedHeader a:link, thead.fixedHeader a:visited {  
color: #FFF;  
display: block;  
text-decoration: none;  
width: 100%  
}  
thead.fixedHeader2 a, thead.fixedHeader2 a:link, thead.fixedHeader a:visited {  
color: #FFF;  
display: block;  
text-decoration: none;  
width: 100%  
}  
/* make the A elements pretty. makes for nice clickable headers */  
/* WARNING: swapping the background on hover may cause problems in WinIE 6.x */  
thead.fixedHeader a:hover {  
color: #FFF;  
display: block;  
text-decoration: underline;  
width: 100%  
}  
/* define the table content to be scrollable */  
/* set TBODY element to have block level attributes. All other non-IE browsers */  
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */  
/* induced side effect is that child TDs no longer accept width: auto */  
/* Filter out Opera 5.x/6.x and MacIE 5.x */  
head:first-child+body tbody[class].scrollContent {  
display: block;  
height: 262px;  
overflow: auto;  
width: 100%  
}  
/* make TD elements pretty. Provide alternating classes for striping the table */  
/* http://www.alistapart.com/articles/zebratables/ */  
tbody.scrollContent td, tbody.scrollContent tr.normalRow td {  
background: #FFF;  
border-bottom: 1px solid #EEE;  
border-left: 1px solid #EEE;  
border-right: 1px solid #AAA;  
border-top: 1px solid #AAA;  
padding: 2px 3px  
}  
tbody.scrollContent tr.alternateRow td {  
background: #EEE;  
border-bottom: 1px solid #EEE;  
border-left: 1px solid #EEE;  
border-right: 1px solid #AAA;  
border-top: 1px solid #AAA;  
padding: 2px 3px  
}  
/* define width of TH elements: 1st, 2nd, and 3rd respectively. */  
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */  
/* Add 16px to last TH for scrollbar padding */  
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors */  
head:first-child+body thead[class].fixedHeader th {  
width: 200px  
}  
head:first-child+body thead[class].fixedHeader th + th {  
width: 250px  
}  
head:first-child+body thead[class].fixedHeader th + th + th {  
border-right: none;  
padding: 4px 4px 4px 3px;  
width: 316px  
}  
/* define width of TH elements: 1st, 2nd, and 3rd respectively. */  
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */  
/* Add 16px to last TH for scrollbar padding */  
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors */  
head:first-child+body tbody[class].scrollContent td {  
width: 200px  
}  
head:first-child+body tbody[class].scrollContent td + td {  
width: 250px  
}  
head:first-child+body tbody[class].scrollContent td + td + td {  
border-right: none;  
padding: 2px 4px 2px 3px;  
width: 300px  
/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */  
top: expression(document.getElementById("tableContainer").scrollTop)  
}  
-->
</style>
<script>
   function test() {
    var cH = document.getElementById("tableContainer").clientHeight;
    var sH = document.getElementById("tableContainer").scrollHeight;
    var sT = document.getElementById("tableContainer").scrollTop;
    alert(cH+":"+sH+":"+sT);
   }
  </script>
<div class="tableContainer" id="tableContainer">
<table class="scrollTable" cellspacing="0" cellpadding="0" width="100%" border="0">
    <thead class="fixedHeader">
        <tr>
            <th><a onclick="javascript:test();" href="#">Header 1</a></th>
            <th><a href="#">Header 2</a></th>
            <th><a href="#">Header 3</a></th>
            <th><a href="#">Header 4</a></th>
        </tr>
    </thead>
    <tbody class="scrollContent">
        <tr>
            <td>Cell Content 1</td>
            <td>Cell Content 2</td>
            <td>Cell Content 3</td>
            <td>Cell Content 4</td>
        </tr>
        <tr>
            <td>More Cell Content 1</td>
            <td>More Cell Content 2</td>
            <td>More Cell Content 3</td>
            <td>More Cell Content 4</td>
        </tr>
        <tr>
            <td noWrap>Even More Cell Content 1</td>
            <td noWrap>Even More Cell Content 2</td>
            <td noWrap>Even More Cell Content 3</td>
            <td noWrap>Even More Cell Content 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>And Repeat 4</td>
        </tr>
        <tr>
            <td>And Repeat 1</td>
            <td>And Repeat 2</td>
            <td>And Repeat 3</td>
            <td>最后 7</td>
        </tr>
    </tbody>
    <thead class="fixedHeader2">
        <tr>
            <th><a href="#">合计:</a></th>
            <th colspan="6"><a href="#">10000</a></th>
        </tr>
    </thead>
</table>
</div>
<br />
<br />
代码 <br />
<p>&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;head&gt;&nbsp; <br />
&lt;style type="text/css"&gt;&nbsp; <br />
&lt;!--&nbsp; <br />
body {&nbsp; <br />
background: #FFF;&nbsp; <br />
color: #000;&nbsp; <br />
font: normal normal 12px Verdana, Geneva, Arial, Helvetica, sans-serif;&nbsp; <br />
margin: 10px;&nbsp; <br />
padding: 0&nbsp; <br />
}&nbsp; </p>
<p>table, td, a {&nbsp; <br />
color: #000;&nbsp; <br />
font: normal normal 12px Verdana, Geneva, Arial, Helvetica, sans-serif&nbsp; <br />
}&nbsp; </p>
<p>.td&nbsp; <br />
{&nbsp; <br />
nowrap:&#8217;&#8217;true&#8217;&#8217;;&nbsp; <br />
}&nbsp; </p>
<p>div.tableContainer {&nbsp; <br />
clear: both;&nbsp; <br />
border: 1px solid #963;&nbsp; <br />
height: 285px;&nbsp; <br />
overflow: auto;&nbsp; <br />
width: 100%;&nbsp; <br />
}&nbsp; </p>
<p>/* WinIE 6.x needs to re-account for it&#8217;&#8217;s scrollbar. Give it some padding */&nbsp; <br />
\html div.tableContainer/* */ {&nbsp; <br />
padding: 0 16px 0 0&nbsp; <br />
}&nbsp; </p>
<p>/* clean up for allowing display Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
html&gt;body div.tableContainer {&nbsp; <br />
height: auto;&nbsp; <br />
padding: 0;&nbsp; <br />
width: 740px&nbsp; <br />
}&nbsp; </p>
<p>/* Reset overflow value to hidden for all non-IE browsers. */&nbsp; <br />
/* Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
head:first-child+body div[class].tableContainer {&nbsp; <br />
height: 285px;&nbsp; <br />
overflow: hidden;&nbsp; <br />
width: 756px&nbsp; <br />
}&nbsp; </p>
<p>/* define width of table. IE browsers only */&nbsp; <br />
/* if width is set to 100%, you can remove the width */&nbsp; <br />
/* property from div.tableContainer and have the div scale */&nbsp; <br />
div.tableContainer table {&nbsp; <br />
float: left;&nbsp; <br />
width: 100%&nbsp; <br />
}&nbsp; </p>
<p>/* WinIE 6.x needs to re-account for padding. Give it a negative margin */&nbsp; <br />
\html div.tableContainer table/* */ {&nbsp; <br />
margin: 0 -16px 0 0&nbsp; <br />
}&nbsp; </p>
<p>/* define width of table. Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
html&gt;body div.tableContainer table {&nbsp; <br />
float: none;&nbsp; <br />
margin: 0;&nbsp; <br />
width: 740px&nbsp; <br />
}&nbsp; </p>
<p>/* define width of table. Add 16px to width for scrollbar. */&nbsp; <br />
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
head:first-child+body div[class].tableContainer table {&nbsp; <br />
width: 756px&nbsp; <br />
}&nbsp; </p>
<p>/* set table header to a fixed position. WinIE 6.x only */&nbsp; <br />
/* In WinIE 6.x, any element with a position property set to relative and is a child of */&nbsp; <br />
/* an element that has an overflow property set, the relative value translates into fixed. */&nbsp; <br />
/* Ex: parent element DIV with a class of tableContainer has an overflow property set to auto */&nbsp; <br />
thead.fixedHeader tr {&nbsp; <br />
position: relative;&nbsp; <br />
/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */&nbsp; <br />
top: expression(document.getElementById("tableContainer").scrollTop)&nbsp; <br />
}&nbsp; <br />
thead.fixedHeader2 tr {&nbsp; <br />
position: relative;&nbsp; <br />
/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */&nbsp; <br />
bottom: expression(document.getElementById("tableContainer").scrollHeight &gt; document.getElementById("tableContainer").clientHeight ? document.getElementById("tableContainer").scrollHeight - document.getElementById("tableContainer").scrollTop - document.getElementById("tableContainer").clientHeight :0)&nbsp; <br />
}&nbsp; </p>
<p>/* set THEAD element to have block level attributes. All other non-IE browsers */&nbsp; <br />
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */&nbsp; <br />
/* Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
head:first-child+body thead[class].fixedHeader tr {&nbsp; <br />
display: block&nbsp; <br />
}&nbsp; </p>
<p>/* make the TH elements pretty */&nbsp; <br />
thead.fixedHeader th {&nbsp; <br />
background: #C96;&nbsp; <br />
border-left: 1px solid #EB8;&nbsp; <br />
border-right: 1px solid #B74;&nbsp; <br />
border-top: 1px solid #EB8;&nbsp; <br />
font-weight: normal;&nbsp; <br />
padding: 4px 3px;&nbsp; <br />
text-align: center&nbsp; <br />
}&nbsp; <br />
/* make the TH elements pretty */&nbsp; <br />
thead.fixedHeader2 th {&nbsp; <br />
background: #C96;&nbsp; <br />
border-left: 1px solid #EB8;&nbsp; <br />
border-right: 1px solid #B74;&nbsp; <br />
border-top: 1px solid #EB8;&nbsp; <br />
font-weight: normal;&nbsp; <br />
padding: 4px 3px;&nbsp; <br />
text-align: left&nbsp; <br />
}&nbsp; <br />
/* make the A elements pretty. makes for nice clickable headers */&nbsp; <br />
thead.fixedHeader a, thead.fixedHeader a:link, thead.fixedHeader a:visited {&nbsp; <br />
color: #FFF;&nbsp; <br />
display: block;&nbsp; <br />
text-decoration: none;&nbsp; <br />
width: 100%&nbsp; <br />
}&nbsp; <br />
thead.fixedHeader2 a, thead.fixedHeader2 a:link, thead.fixedHeader a:visited {&nbsp; <br />
color: #FFF;&nbsp; <br />
display: block;&nbsp; <br />
text-decoration: none;&nbsp; <br />
width: 100%&nbsp; <br />
}&nbsp; </p>
<p>/* make the A elements pretty. makes for nice clickable headers */&nbsp; <br />
/* WARNING: swapping the background on hover may cause problems in WinIE 6.x */&nbsp; <br />
thead.fixedHeader a:hover {&nbsp; <br />
color: #FFF;&nbsp; <br />
display: block;&nbsp; <br />
text-decoration: underline;&nbsp; <br />
width: 100%&nbsp; <br />
}&nbsp; </p>
<p>/* define the table content to be scrollable */&nbsp; <br />
/* set TBODY element to have block level attributes. All other non-IE browsers */&nbsp; <br />
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */&nbsp; <br />
/* induced side effect is that child TDs no longer accept width: auto */&nbsp; <br />
/* Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
head:first-child+body tbody[class].scrollContent {&nbsp; <br />
display: block;&nbsp; <br />
height: 262px;&nbsp; <br />
overflow: auto;&nbsp; <br />
width: 100%&nbsp; <br />
}&nbsp; </p>
<p>/* make TD elements pretty. Provide alternating classes for striping the table */&nbsp; <br />
/* http://www.alistapart.com/articles/zebratables/ */&nbsp; <br />
tbody.scrollContent td, tbody.scrollContent tr.normalRow td {&nbsp; <br />
background: #FFF;&nbsp; <br />
border-bottom: 1px solid #EEE;&nbsp; <br />
border-left: 1px solid #EEE;&nbsp; <br />
border-right: 1px solid #AAA;&nbsp; <br />
border-top: 1px solid #AAA;&nbsp; <br />
padding: 2px 3px&nbsp; <br />
}&nbsp; </p>
<p>tbody.scrollContent tr.alternateRow td {&nbsp; <br />
background: #EEE;&nbsp; <br />
border-bottom: 1px solid #EEE;&nbsp; <br />
border-left: 1px solid #EEE;&nbsp; <br />
border-right: 1px solid #AAA;&nbsp; <br />
border-top: 1px solid #AAA;&nbsp; <br />
padding: 2px 3px&nbsp; <br />
}&nbsp; </p>
<p>/* define width of TH elements: 1st, 2nd, and 3rd respectively. */&nbsp; <br />
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
/* Add 16px to last TH for scrollbar padding */&nbsp; <br />
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors */&nbsp; <br />
head:first-child+body thead[class].fixedHeader th {&nbsp; <br />
width: 200px&nbsp; <br />
}&nbsp; </p>
<p>head:first-child+body thead[class].fixedHeader th + th {&nbsp; <br />
width: 250px&nbsp; <br />
}&nbsp; </p>
<p>head:first-child+body thead[class].fixedHeader th + th + th {&nbsp; <br />
border-right: none;&nbsp; <br />
padding: 4px 4px 4px 3px;&nbsp; <br />
width: 316px&nbsp; <br />
}&nbsp; </p>
<p>/* define width of TH elements: 1st, 2nd, and 3rd respectively. */&nbsp; <br />
/* All other non-IE browsers. Filter out Opera 5.x/6.x and MacIE 5.x */&nbsp; <br />
/* Add 16px to last TH for scrollbar padding */&nbsp; <br />
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors */&nbsp; <br />
head:first-child+body tbody[class].scrollContent td {&nbsp; <br />
width: 200px&nbsp; <br />
}&nbsp; </p>
<p>head:first-child+body tbody[class].scrollContent td + td {&nbsp; <br />
width: 250px&nbsp; <br />
}&nbsp; </p>
<p>head:first-child+body tbody[class].scrollContent td + td + td {&nbsp; <br />
border-right: none;&nbsp; <br />
padding: 2px 4px 2px 3px;&nbsp; <br />
width: 300px&nbsp; </p>
<p>/* expression is for WinIE 5.x only. Remove to validate and for pure CSS solution */&nbsp; <br />
top: expression(document.getElementById("tableContainer").scrollTop)&nbsp; <br />
}&nbsp; <br />
--&gt;&nbsp; <br />
&lt;/style&gt;&nbsp; <br />
&lt;/head&gt;&lt;body&gt;&nbsp; <br />
&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;function test() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var cH = document.getElementById("tableContainer").clientHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var sH = document.getElementById("tableContainer").scrollHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var sT = document.getElementById("tableContainer").scrollTop;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(cH+":"+sH+":"+sT);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&lt;/script&gt;<br />
&lt;div id="tableContainer" class="tableContainer"&gt;&nbsp; <br />
&lt;table border="0" cellpadding="0" cellspacing="0" width="100%" class="scrollTable"&gt;&nbsp; <br />
&lt;thead class="fixedHeader"&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;th&gt;&lt;a href="#" onclick="javascript:test();"&gt;Header 1&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;th&gt;&lt;a href="#"&gt;Header 2&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;th&gt;&lt;a href="#"&gt;Header 3&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;th&gt;&lt;a href="#"&gt;Header 4&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;/tr&gt;&nbsp; <br />
&lt;/thead&gt;&nbsp; <br />
&lt;tbody class="scrollContent"&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;Cell Content 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;Cell Content 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;Cell Content 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;Cell Content 4&lt;/td&gt;&nbsp; <br />
&nbsp;<br />
&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;More Cell Content 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;More Cell Content 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;More Cell Content 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;More Cell Content 4&lt;/td&gt;&nbsp; <br />
&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td nowrap&gt;Even More Cell Content 1&lt;/td&gt;&nbsp; <br />
&lt;td nowrap&gt;Even More Cell Content 2&lt;/td&gt;&nbsp; <br />
&lt;td nowrap&gt;Even More Cell Content 3&lt;/td&gt;&nbsp; <br />
&lt;td nowrap&gt;Even More Cell Content 4&lt;/td&gt;&nbsp; <br />
&lt;/tr&gt;&nbsp; </p>
<p>&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 4&lt;/td&gt;&nbsp; </p>
<p>&lt;/tr&gt; <br />
&lt;tr&gt;&nbsp; <br />
&lt;td&gt;And Repeat 1&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 2&lt;/td&gt;&nbsp; <br />
&lt;td&gt;And Repeat 3&lt;/td&gt;&nbsp; <br />
&lt;td&gt;最后 7&lt;/td&gt;&nbsp; <br />
&lt;/tr&gt;&nbsp; </p>
<p>&lt;/tbody&gt;&nbsp; </p>
<p>&lt;thead class="fixedHeader2"&gt;&nbsp; <br />
&lt;tr&gt;&nbsp; <br />
&lt;th&gt;&lt;a href="#"&gt;合计:&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;th colspan=6&gt;&lt;a href="#"&gt;10000&lt;/a&gt;&lt;/th&gt;&nbsp; <br />
&lt;/tr&gt;&nbsp; <br />
&lt;/thead&gt;&nbsp; </p>
<p>&lt;/table&gt;&nbsp; <br />
&lt;/div&gt;&nbsp; </p>
<p>&lt;/body&gt;&lt;/html&gt; </p>
 <img src ="http://www.blogjava.net/zhaochengming/aggbug/226835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2008-09-04 09:12 <a href="http://www.blogjava.net/zhaochengming/archive/2008/09/04/226835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax下拉提示</title><link>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136478.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 13 Aug 2007 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136478.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/136478.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/136478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/136478.html</trackback:ping><description><![CDATA[<p>function suggest(src,confield,convalue,operation,thisObj) {<br>var str = thisObj.value;<br>var key = window.event.keyCode;<br>if (key == 40 || key == 38) {<br>&nbsp;&nbsp; if (isNull(thisObj.value2)) {<br>&nbsp;&nbsp;&nbsp; thisObj.value2 = thisObj.value;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; var suggestDiv = document.getElementById(thisObj.name+"_suggest");<br>&nbsp;&nbsp; if (!isNull(suggestDiv)) {<br>&nbsp;&nbsp;&nbsp; var divArr = suggestDiv.childNodes;<br>&nbsp;&nbsp;&nbsp; var hasIn = false;<br>&nbsp;&nbsp;&nbsp; for (var i = 0; i &lt; divArr.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp; if(divArr[i].className == "td-across-deep") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hasIn = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i].className = "td-across-low";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i].style.backgroundColor = "white";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (key == 40) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i == divArr.length-1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thisObj.value = thisObj.value2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i+1].className = "td-across-deep";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i+1].style.backgroundColor = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thisObj.value = divArr[i+1].innerText;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (key == 38) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i == 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thisObj.value = thisObj.value2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i-1].className = "td-across-deep";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divArr[i-1].style.backgroundColor = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thisObj.value = divArr[i-1].innerText;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if (!hasIn) {<br>&nbsp;&nbsp;&nbsp;&nbsp; var i = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp; if (key == 38) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = divArr.length-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suggestDiv.scrollTop = 200;<br>&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suggestDiv.scrollTop = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; divArr[i].className = "td-across-deep";<br>&nbsp;&nbsp;&nbsp;&nbsp; divArr[i].style.backgroundColor = "";<br>&nbsp;&nbsp;&nbsp;&nbsp; thisObj.value = divArr[i].innerText;<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp; key == 40 ? (suggestDiv.scrollTop +=17) : (suggestDiv.scrollTop -=17);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp; }<br>}<br>var dbonclick = document.body.onclick<br>document.body.onclick = function() {<br>&nbsp;&nbsp; if(!isNull(dbonclick))<br>&nbsp;&nbsp;&nbsp; dbonclick();<br>&nbsp;&nbsp; var arr = document.getElementsByTagName("div");<br>&nbsp;&nbsp; if (!isNull(arr))<br>&nbsp;&nbsp; for (var i = 0; i &lt; arr.length; i++) {<br>&nbsp;&nbsp;&nbsp; if (!isNull(arr[i].name))<br>&nbsp;&nbsp;&nbsp; if (arr[i].name.indexOf("suggest") &gt;= 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp; document.body.removeChild(arr[i]);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; arr = document.getElementsByTagName("iframe");<br>&nbsp;&nbsp; if (!isNull(arr))<br>&nbsp;&nbsp; for (var i = 0; i &lt; arr.length; i++) {<br>&nbsp;&nbsp;&nbsp; if (!isNull(arr[i].name))<br>&nbsp;&nbsp;&nbsp; if (arr[i].name.indexOf("suggest") &gt;= 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp; document.body.removeChild(arr[i]);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; thisObj.value2 = null;<br>}<br>try {<br>document.body.onclick();<br>} catch (e) {<br>&nbsp;&nbsp; alert(e);<br>}<br>if (key == 13 || key ==&nbsp;&nbsp; 27 || isNull(str) || str.trim() == "" ) {<br>&nbsp;&nbsp; return true;<br>}<br>var h=location.protocol+"//"+location.host+"/";<br>&nbsp;&nbsp;&nbsp;&nbsp; var pn=location.href.substring(h.length);<br>&nbsp;&nbsp;&nbsp;&nbsp; pn=pn.substring(0,pn.indexOf("/"));<br>var records=thisObj.name.substring(thisObj.name.lastIndexOf("_")+1);<br>var fields = confield.split("#");<br>var conVal = convalue.split("#");<br>var confields = confield.split("#");<br>var con = "";<br>for (var i = 1; i &lt; conVal.length; ++i) {<br>&nbsp;&nbsp; var temp = "&amp;fld"+confields[i]+"=";<br>&nbsp;&nbsp; if (conVal[i].substring(0,1) == "&amp;") {<br>&nbsp;&nbsp;&nbsp; temp += conVal[i].substring(1);<br>&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp; var valObj = document.all["fld_abm"+parseFloat(conVal[i])+"_"+records];<br>&nbsp;&nbsp;&nbsp; if (valObj == null) {<br>&nbsp;&nbsp;&nbsp;&nbsp; valObj = document.all["fld_abm"+parseFloat(conVal[i])+"_"+1];<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; temp += strTrim(getObjValue(valObj));<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; con += temp;<br>}<br>url="/"+pn+"/FormServlet?act=getSuggest&amp;src="+src+"&amp;field="+confield+con;<br>&nbsp;&nbsp;&nbsp;&nbsp; if (operation != null) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url += "&amp;operation="+operation;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>while (url.indexOf("#") &gt;=0) {<br>&nbsp;&nbsp; url = url.replace("#","_");<br>}<br>&nbsp;&nbsp;&nbsp;&nbsp; url+="&amp;suggest="+str;<br>url = encodeURI(url);<br>var ajax = new Ajax(url,"post");<br>var divObj = document.all[thisObj.name+"_suggest"];<br>var iframeObj = document.createElement("iframe");</p>
<p>iframeObj.id = thisObj.name+"_suggest_iframe";<br>iframeObj.name = thisObj.name+"_suggest_iframe";<br>document.body.appendChild(iframeObj);<br>if (isNull(divObj)) {<br>&nbsp;&nbsp; divObj = document.createElement("DIV");<br>}<br>divObj.name = thisObj.name+"_suggest";<br>divObj.id = thisObj.name+"_suggest";<br>divObj.style.border = '1px';<br>divObj.isOut = "true";<br>divObj.onmouseover = "javascript:this.isOut = 'false'";<br>divObj.onmouseout = "javascript:this.isOut = 'true'";<br>divObj.style.cursor = "hand";</p>
<p>document.body.appendChild(divObj);<br>divObj.style.position = "absolute";<br>ajax.setResponseFun(function(){<br>&nbsp;&nbsp; var dom = ajax.getDomDoc();<br>&nbsp;&nbsp; if(dom.readyState == 4) {<br>&nbsp;&nbsp;&nbsp; var root = dom.documentElement;<br>&nbsp;&nbsp;&nbsp; var str = "";<br>&nbsp;&nbsp;&nbsp; if (root.childNodes.length == 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp; document.body.onclick();<br>&nbsp;&nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; for(var i = 0; i &lt; root.childNodes.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp; str+="&lt;div onmouseover='javascript:suggestOver(this);'";<br>&nbsp;&nbsp;&nbsp;&nbsp; str+=" onmouseout='javascript:suggestOut(this);' ";<br>&nbsp;&nbsp;&nbsp;&nbsp; str+=" onclick='javascript:setSearch(this.innerHTML,\""+thisObj.name+"\");' class='td-across-low' style='background-color:white;'&gt;";<br>&nbsp;&nbsp;&nbsp;&nbsp; str+=root.childNodes[i].text+"&lt;/div&gt;";<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; divObj.innerHTML = str;<br>&nbsp;&nbsp;&nbsp; divObj.style.borderBottom = '0.008cm outset ';<br>&nbsp;&nbsp;&nbsp; divObj.style.borderRight = '0.008cm outset ';<br>&nbsp;&nbsp;&nbsp; divObj.style.borderTop = '0.008cm outset ';<br>&nbsp;&nbsp;&nbsp; divObj.style.borderLeft = '0.008cm outset ';<br>&nbsp;&nbsp;&nbsp; divObj.style.overflowY = "auto";<br>&nbsp;&nbsp;&nbsp; divObj.style.height = divObj.offsetHeight &gt; 300 ? 300 : divObj.offsetHeight;<br>&nbsp;&nbsp;&nbsp; var oRect = thisObj.getBoundingClientRect();<br>&nbsp;&nbsp;&nbsp; divObj.style.left = oRect.left;<br>&nbsp;&nbsp;&nbsp; divObj.style.top = oRect.top + 18;<br>&nbsp;&nbsp;&nbsp; divObj.style.width = thisObj.clientWidth+2;<br>&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp; var iobj = document.getElementById(thisObj.name+"_suggest_iframe");<br>&nbsp;&nbsp;&nbsp;&nbsp; iobj.style.position = "absolute";<br>&nbsp;&nbsp;&nbsp;&nbsp; iobj.style.left = divObj.offsetLeft;<br>&nbsp;&nbsp;&nbsp;&nbsp; iobj.style.top = divObj.offsetTop;<br>&nbsp;&nbsp;&nbsp;&nbsp; iobj.style.height = divObj.offsetHeight;<br>&nbsp;&nbsp;&nbsp;&nbsp; iobj.style.width = divObj.offsetWidth;<br>&nbsp;&nbsp;&nbsp; } catch(e){}<br>&nbsp;&nbsp; }<br>});<br>ajax.send();<br>return true;<br>}</p>
<p>function suggestOver(obj) {<br>for(var i = 0; i &lt; obj.parentNode.childNodes.length; i++) {<br>&nbsp;&nbsp; obj.parentNode.childNodes[i].className = "td-across-low";&nbsp;&nbsp;<br>&nbsp;&nbsp; obj.parentNode.childNodes[i].style.backgroundColor = "white";<br>}<br>obj.className = "td-across-deep";<br>obj.style.backgroundColor = "";<br>}</p>
<p>function suggestOut(obj) {<br>obj.className = "td-across-low";<br>obj.style.backgroundColor = "white";<br>}</p>
<p>function setSearch(value,thisObjName) {<br>document.all[thisObjName].value = value;<br>try {<br>document.body.removeChild(document.getElementById(thisObjName+"_suggest_iframe"));<br>document.body.removeChild(document.getElementById(thisObjName+"_suggest"));<br>} catch (e){}<br>}</p>
<p>function hideSuggest(thisObj) {<br>var obj = document.getElementById(thisObj.name+"_suggest");<br>if ( isNull(obj) ) {<br>&nbsp;&nbsp; return true;<br>} else {<br>&nbsp;&nbsp; if (obj.isOut == "true") {<br>&nbsp;&nbsp;&nbsp; document.body.removeChild(document.getElementById(obj.name+"_suggest_iframe"));<br>&nbsp;&nbsp;&nbsp; document.body.removeChild(obj);<br>&nbsp;&nbsp; }<br>}<br>return true;<br>}</p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/136478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2007-08-13 18:56 <a href="http://www.blogjava.net/zhaochengming/archive/2007/08/13/136478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iframe调整页面高度，适合大文件的网页</title><link>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136477.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 13 Aug 2007 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136477.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/136477.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/136477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/136477.html</trackback:ping><description><![CDATA[<p>&lt;iframe id="frameaaa"&nbsp;&nbsp;&nbsp; onload="try{document.all['frameaaa'].style.height=frameaaa.document.body.scrollHeight;}catch(e){}"<br>scrolling="no"&gt; &lt;/iframe&gt;</p>
<p>var menuOpen = false;<br>function openMemo(){<br>&nbsp;&nbsp;&nbsp; var obj = document.getElementById('frameaaa');<br>&nbsp;&nbsp;&nbsp; if(!menuOpen) {<br>&nbsp;&nbsp;&nbsp;&nbsp; obj.src = "XXX/XXX.html";<br>&nbsp;&nbsp;&nbsp;&nbsp; obj.style.display="block";<br>&nbsp;&nbsp;&nbsp;&nbsp; menuOpen = true;<br>&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj.onreadystatechange = function() {obj.fireEvent('onload');}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch(e) {}<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>如果没有onreadystatechange，小文件是适合的，大文件就不行了</p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/136477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2007-08-13 18:55 <a href="http://www.blogjava.net/zhaochengming/archive/2007/08/13/136477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 仿msn 弹出信息 点击不隐藏</title><link>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136462.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 13 Aug 2007 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136462.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/136462.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2007/08/13/136462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/136462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/136462.html</trackback:ping><description><![CDATA[<p>/**<br>* 功能: 仿Msn信息提示<br>* @param height : 信息框的高度<br>* @param width : 信息框的宽度<br>* @param title : 信息框的标题<br>* @param innerHTML : 信息框面板显示内容,放在&lt;DIV&gt;&lt;/DIV&gt;中,任意的HTML代码<br>* @return void <br>*/<br>function CMsnMsg(width,height,title,innerHTML) {<br>this.height = (height!=null)?height:150;<br>this.width = (width!=null)?width:200;<br>this.title = title; <br>this.innerHTML = innerHTML;<br>//以下为默认值设置,可以调用对象的成员直接修改<br>//信息框默认为自动隐藏<br>this.autoHide = true;<br>//信息框右边的x坐标<br>this.right = screen.width - 2;<br>//信息框的左部x坐标<br>this.left = this.right - this.width;<br>//信息框的底部y坐标<br>this.bottom = screen.height;<br>//信息框的顶部的y坐标<br>this.top = this.bottom - this.height;<br>//默认为没有关闭<br>this.close = false;<br>//默认为没有停止不动<br>this.pause = false;<br>//信息框移动速度<br>this.speed = 15;<br>//正常显示需要多久的时间,然后关闭掉<br>this.timeout = 300;<br>//设置步长<br>this.step = 1;<br>//定时器<br>this.timer = 0;<br>}</p>
<p>/**<br>* CMsnMsg对象的显示方法<br>*/<br>CMsnMsg.prototype.show = function() {<br>var pop = window.createPopup();<br>this.pop = pop;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var str = "&lt;DIV style='BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX: 99999; LEFT: 0px; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: " <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str +=this.width + "px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 0px; HEIGHT: " + this.height + "px; BACKGROUND-COLOR: #c9d3f3'&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TABLE style='BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid' cellSpacing=0 cellPadding=0 width='100%' bgColor=#cfdef4 border=0&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TR&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TD style='FONT-SIZE: 12px;COLOR: #0f2c8c' width=30 height=24&gt;&lt;/TD&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TD style='PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #1f336b; PADDING-TOP: 4px' vAlign=center width='100%'&gt;" + this.title + "&lt;/TD&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TD style='PADDING-RIGHT: 2px; PADDING-TOP: 2px' vAlign=center align=right width=19&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;SPAN title=关闭 style='FONT-WEIGHT: bold; FONT-SIZE: 12px; CURSOR: hand; COLOR: black; MARGIN-RIGHT: 4px' id='btSysClose' &gt;&#215;&lt;/SPAN&gt;&lt;/TD&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/TR&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TR&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;TD style='PADDING-RIGHT: 1px;PADDING-BOTTOM: 1px' colSpan=3 height=" + (this.height-28) + "&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;DIV style='BORDER-RIGHT: #b9c9ef 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #728eb8 1px solid; PADDING-LEFT: 8px; FONT-SIZE: 12px; PADDING-BOTTOM: 8px;";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "BORDER-LEFT: #728eb8 1px solid; WIDTH: 100%; COLOR: #1f336b; PADDING-TOP: 8px; BORDER-BOTTOM: #b9c9ef 1px solid; HEIGHT: 100%'&gt;"&nbsp;&nbsp;<br>str += this.innerHTML;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/DIV&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/TD&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/TR&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/TABLE&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += "&lt;/DIV&gt;"&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop.document.body.innerHTML = str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.offset = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var me = this;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop.document.body.onmouseover = function() {me.pause = true;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop.document.body.onmouseout = function() {me.pause = false;};<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var fun = function() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = me.left;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var y = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var width = me.width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var height = me.height;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (me.offset &gt; me.height) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height = me.height;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height = me.offset;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = me.bottom - me.offset;<br>&nbsp;&nbsp;&nbsp; if (y &lt;= me.top) {<br>&nbsp;&nbsp;&nbsp;&nbsp; me.timeout -= 1;<br>&nbsp;&nbsp;&nbsp;&nbsp; if (me.timeout == 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.clearInterval(me.timer);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (me.autoHide) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.hide();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp; me.offset += me.step;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; me.pop.show(x,y,width,height);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.timer = window.setInterval(fun,this.speed);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var btClose = pop.document.getElementById("btSysClose");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btClose.onclick = function(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.close = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.hide();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>/**<br>* CMsnMsg对象的关闭方法<br>*/<br>CMsnMsg.prototype.hide = function() {<br>flag = true;<br>var offset = this.height&gt;this.bottom-this.top?this.height:this.bottom-this.top;<br>var me = this;<br>if(this.timer &gt; 0){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; window.clearInterval(me.timer); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var fun = function() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!me.pause || me.close) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = me.left;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var y = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var width = me.width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var height = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (me.offset &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height = me.offset;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = me.bottom - height;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (y &gt;= me.bottom) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.clearInterval(me.timer);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.pop.hide();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.offset -= me.step;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me.pop.show(x,y,width,height);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.timer = window.setInterval(fun,this.speed);<br>}<br>var msg = null;<br>function test() {<br>if (msg == null || !msg.pause) {<br>&nbsp;&nbsp;&nbsp;&nbsp; msg = new CMsnMsg(300,220,"ABM系统提示");<br>&nbsp;&nbsp;&nbsp;&nbsp; msg.innerHTML = "&lt;A href='www.baidu.com'&gt;www.baidu.com&lt;/a&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp; msg.show();<br>}<br>}<br>window.setInterval("test();",20000);</p>
<img src ="http://www.blogjava.net/zhaochengming/aggbug/136462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2007-08-13 18:42 <a href="http://www.blogjava.net/zhaochengming/archive/2007/08/13/136462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>