﻿<?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-govo</title><link>http://www.blogjava.net/govo/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 11:55:55 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 11:55:55 GMT</pubDate><ttl>60</ttl><item><title>给你的元素加一把锁－－Prototype.js</title><link>http://www.blogjava.net/govo/archive/2006/09/14/69724.html</link><dc:creator>govo</dc:creator><author>govo</author><pubDate>Thu, 14 Sep 2006 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/govo/archive/2006/09/14/69724.html</guid><wfw:comment>http://www.blogjava.net/govo/comments/69724.html</wfw:comment><comments>http://www.blogjava.net/govo/archive/2006/09/14/69724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/govo/comments/commentRss/69724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/govo/services/trackbacks/69724.html</trackback:ping><description><![CDATA[
		<p> 　　在Ajax应用中，我们常常要频繁更改某一元素的值。例如有一ID为"pageBody"的元素，我们想把所有文章内容都在这里显示，做到局部刷新的Ajax应用。但如果因为网速较慢，使得此元素在接收信息时就被用户执行其它行为，而改变此元素的内容了，而之前的接收信息的线程还在进行着，当此线程完成了，又把pageBody的值改了一下，此时用户会觉得不知所措，怎么这块东西闪来闪去的？严重者，会因为子元素的消失而出现JS错误的现象。<br />　　为了解决此问题，有两个方法：第一、在执行线程（假设执行一次取值为一个线程）的时候，建立一个满屏的DIV，使得用户无法执行其它行为；第二、制作一把锁，把此元素锁起来，当其它线程想改变它的值时先查检此元素是否上锁。<br />　　第一种方法使得用户进入了等待状态，虽然页面没有刷新，但与没有使用Ajax的页面没什么分别，所以在非不得已的情况下都不要使用此方法。<br />　　下面我说说第二种方法－－制作元素锁。<br />　　其实要实现这个锁，原理很简单，与java中的线程锁有点类似，可惜偶对java的线程锁理解不深入，所以在javaScript中此锁与java的线程锁应该又会有很大的不同，甚至完全不是一个回事。<br />　　首先，我们需要一个Object， </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> _key</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">{key:key,value:</span>
				<span style="COLOR: #0000ff">true</span>
				<span style="COLOR: #000000">};</span>
		</div>
		<p>其中key为此对象的标识，value是否为真就等于是否为锁定。<br />在java中，每一个Object对象都可以用作锁，但javaScript中不同，而且通过<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080">1</span> <span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">){<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(condition) </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"> }</span></div>
		<p>的方法根本行不通，因为这个while(true)会让浏览器僵死，Firefox会提示是否继续执行脚本,IE可能会说脚本有误，杀毒软件可能说这是病毒！<br />　　为了能统领全局，更灵活的掌控它，我们把锁都放到一个数组中：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080">1</span> <span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> _mainlock</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">[];</span></div>
		<p>同时，为了方便应用，我使用了Prototype.js，以扩展Array的方法，主要用这三个方法：<br /><font color="#0000ff">1、detect(iterator)：集合中每个元素调用一次Iterator，返回第一个使Iterator返回True的元素，如果最终都没有为true的调用，那么返回null。<br /> 2、reject(iterator)：返回所有等于false的元素。<br /> 3、each(iterator)：把每个element做为第一个参数，element的index作为第一个参数调用iterator函数。<br /></font> 有了它们，我们可以创建一个Push来给 _mainlock加入唯一key的锁，类似HashMap原理：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_24_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_136_Open_Text.style.display='none'; Codehighlighter1_24_136_Closed_Image.style.display='inline'; Codehighlighter1_24_136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_24_136_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_136_Closed_Text.style.display='none'; Codehighlighter1_24_136_Open_Image.style.display='inline'; Codehighlighter1_24_136_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> _Push</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(Obj)</span>
				<span id="Codehighlighter1_24_136_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_24_136_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_66_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_89_Open_Text.style.display='none'; Codehighlighter1_66_89_Closed_Image.style.display='inline'; Codehighlighter1_66_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_66_89_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_89_Closed_Text.style.display='none'; Codehighlighter1_66_89_Open_Image.style.display='inline'; Codehighlighter1_66_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> unIns</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">_mainlock.reject(</span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">(d)</span>
						<span id="Codehighlighter1_66_89_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_66_89_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> d.key</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000">Obj.key;}</span>
						</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  _mainlock</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">unIns;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  _mainlock.push(Obj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />只要执行_Push(_key)就可以把对象放入这个伪HashMap中去。如果已有相同的key的对象，则会覆盖它，没有就直接放入。<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_21_84_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_84_Open_Text.style.display='none'; Codehighlighter1_21_84_Closed_Image.style.display='inline'; Codehighlighter1_21_84_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_21_84_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_84_Closed_Text.style.display='none'; Codehighlighter1_21_84_Open_Image.style.display='inline'; Codehighlighter1_21_84_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> get</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(key)</span>
				<span id="Codehighlighter1_21_84_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_21_84_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_60_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_79_Open_Text.style.display='none'; Codehighlighter1_60_79_Closed_Image.style.display='inline'; Codehighlighter1_60_79_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_60_79_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_79_Closed_Text.style.display='none'; Codehighlighter1_60_79_Open_Image.style.display='inline'; Codehighlighter1_60_79_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> _mainlock.detect(</span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">(d)</span>
						<span id="Codehighlighter1_60_79_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_60_79_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> d.key</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000">key;}</span>
						</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p>
				<br /> 通过这个方法，就可以取得相应Key的锁了。<br /> 因为JavaScript对DOM的操作有着很多未知性，不可能总是通过我们预先定义的变量来满足要求，如一个列表，可能是有一行，也可能上千行，每一行的ID又是独立的，所以我们只能用另外的方法来预见之此行为，那就是通过应用HashMap的特性，以string为标识的唯一Key来统领所有将可能发生的事件。因此，再写一个方法：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_23_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_89_Open_Text.style.display='none'; Codehighlighter1_23_89_Closed_Image.style.display='inline'; Codehighlighter1_23_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_23_89_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_89_Closed_Text.style.display='none'; Codehighlighter1_23_89_Open_Image.style.display='inline'; Codehighlighter1_23_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> Lock</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(key)</span>
				<span id="Codehighlighter1_23_89_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_23_89_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_36_55_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_55_Open_Text.style.display='none'; Codehighlighter1_36_55_Closed_Image.style.display='inline'; Codehighlighter1_36_55_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_36_55_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_55_Closed_Text.style.display='none'; Codehighlighter1_36_55_Open_Image.style.display='inline'; Codehighlighter1_36_55_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> _key</span>
						<span style="COLOR: #000000">=</span>
						<span id="Codehighlighter1_36_55_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_36_55_Open_Text">
								<span style="COLOR: #000000">{key:key,value:</span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  _Push(_key);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">true</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p>
				<br />这样，只要有一个string类型的key，就可以建立一个锁对象了。以后，对锁的建立和获取，都可以通过上面三个方法来实现,只要一个string作为Key来操作锁,而无需知道锁的内部是如何构造。<br />接下来，我们要实现isWait(),sleep(),awake()和awakeAll()方法，以完善这个锁：<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_25_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_114_Open_Text.style.display='none'; Codehighlighter1_25_114_Closed_Image.style.display='inline'; Codehighlighter1_25_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_25_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_114_Closed_Text.style.display='none'; Codehighlighter1_25_114_Open_Image.style.display='inline'; Codehighlighter1_25_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> isWait</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(key)</span>
				<span id="Codehighlighter1_25_114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_25_114_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">返回真表示锁，否则表示非锁</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> ins</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">GDnews.get(key);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(ins) </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> ins.value;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_146_245_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_245_Open_Text.style.display='none'; Codehighlighter1_146_245_Closed_Image.style.display='inline'; Codehighlighter1_146_245_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_146_245_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_245_Closed_Text.style.display='none'; Codehighlighter1_146_245_Open_Image.style.display='inline'; Codehighlighter1_146_245_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> sleep</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(key,time)</span>
				<span id="Codehighlighter1_146_245_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_146_245_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">给锁上锁指定秒数，若干秒后自动解锁</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  GDnews.Lock(key);<br /><img id="Codehighlighter1_217_235_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_235_Open_Text.style.display='none'; Codehighlighter1_217_235_Closed_Image.style.display='inline'; Codehighlighter1_217_235_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_217_235_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_235_Closed_Text.style.display='none'; Codehighlighter1_217_235_Open_Image.style.display='inline'; Codehighlighter1_217_235_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  window.setTimeout(</span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">()</span>
						<span id="Codehighlighter1_217_235_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_217_235_Open_Text">
								<span style="COLOR: #000000">{GDnews.awake(key)}</span>
						</span>
						<span style="COLOR: #000000">,time);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_272_353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_272_353_Open_Text.style.display='none'; Codehighlighter1_272_353_Closed_Image.style.display='inline'; Codehighlighter1_272_353_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_272_353_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_353_Closed_Text.style.display='none'; Codehighlighter1_272_353_Open_Image.style.display='inline'; Codehighlighter1_272_353_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> awake</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(key)</span>
				<span id="Codehighlighter1_272_353_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_272_353_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">强行开锁</span>
						<span style="COLOR: #008000">
								<br />
								<img id="Codehighlighter1_291_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_291_311_Open_Text.style.display='none'; Codehighlighter1_291_311_Closed_Image.style.display='inline'; Codehighlighter1_291_311_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_291_311_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_291_311_Closed_Text.style.display='none'; Codehighlighter1_291_311_Open_Image.style.display='inline'; Codehighlighter1_291_311_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> _key</span>
						<span style="COLOR: #000000">=</span>
						<span id="Codehighlighter1_291_311_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_291_311_Open_Text">
								<span style="COLOR: #000000">{key:key,value:</span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  GDnews._Push(_key);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_380_579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_380_579_Open_Text.style.display='none'; Codehighlighter1_380_579_Closed_Image.style.display='inline'; Codehighlighter1_380_579_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_380_579_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_380_579_Closed_Text.style.display='none'; Codehighlighter1_380_579_Open_Image.style.display='inline'; Codehighlighter1_380_579_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> awakeAll</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">()</span>
				<span id="Codehighlighter1_380_579_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_380_579_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">强行打开所有锁</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">GDnews._mainlock) </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">all</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> newList</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">[];<br /><img id="Codehighlighter1_488_530_Open_Image" onclick="this.style.display='none'; Codehighlighter1_488_530_Open_Text.style.display='none'; Codehighlighter1_488_530_Closed_Image.style.display='inline'; Codehighlighter1_488_530_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_488_530_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_488_530_Closed_Text.style.display='none'; Codehighlighter1_488_530_Open_Image.style.display='inline'; Codehighlighter1_488_530_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  GDnews._mainlock.each(</span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">(d,index)</span>
						<span id="Codehighlighter1_488_530_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_488_530_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   d.value</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   newList.push(d);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  GDnews._mainlock</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">newList;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
		</div>
		<p>
				<br />
				<br /> 以后，当你使用Prototype.js的快捷键$()时，就可以看看目标是否为isWait，否的话就可以Lock或者sleep一下了。</p>
		<p> 以上就是全文内容，请各位指点。</p>
		<p> </p>
<img src ="http://www.blogjava.net/govo/aggbug/69724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/govo/" target="_blank">govo</a> 2006-09-14 18:26 <a href="http://www.blogjava.net/govo/archive/2006/09/14/69724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>听君一籍话</title><link>http://www.blogjava.net/govo/archive/2006/09/08/68406.html</link><dc:creator>govo</dc:creator><author>govo</author><pubDate>Thu, 07 Sep 2006 17:51:00 GMT</pubDate><guid>http://www.blogjava.net/govo/archive/2006/09/08/68406.html</guid><wfw:comment>http://www.blogjava.net/govo/comments/68406.html</wfw:comment><comments>http://www.blogjava.net/govo/archive/2006/09/08/68406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/govo/comments/commentRss/68406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/govo/services/trackbacks/68406.html</trackback:ping><description><![CDATA[在javaworld上我问了一个问题：<br /><span class="javascript" id="text165947">      当我们有了Ajax了，基本所有页面都可能用Html为文件后缀了，TAG不用写了，&lt;%%&gt;符号也不用写了，那么，我们还用得着Struts或JSF吗？ <br />      然后热心的大虾<strong>kebin_liu</strong> 给我指点了迷津，现在把他的话抄下：<img height="19" src="http://www.blogjava.net/Emoticons/emteeth.gif" width="19" border="0" /><br /><br /><span class="javascript" id="text165981"><font color="#000080">用一句俗語來解釋會比較容易瞭解，那就是『殺雞焉用牛刀』。 <br />Struts等 web framework算是牛刀，那AJAX就是殺雞小刀，殺雞小刀能不能取代牛刀?當然可以，只是用起來會不順手不方便而已。但反過來牛刀能不能取代小刀?答案是沒辦法完全取代，因為會有死角。 <br /><br />web framework適合處理web ap的運作流程，而AJAX適合資料傳輸與頁面處理，如果從所有的web ap說穿了就只是資料傳輸與頁面處理的角度去思考，的確會認為AJAX可以替代一切 web framework。只是當一切都改用 AJAX來處理的時候，開發的工作勢必變得零碎繁瑣，就像用小刀殺牛，最終牛一定會死，但是操刀者辛苦不說，那頭牛也飽受凌遲。 <br /><br />而因為 web framework無法處理純粹頁面部分的控制，所以不管有沒有AJAX，web ap都離不開 script，因為 web framework有這個死角，所以說webframework無法取代 AJAX。 <br /><br />再用一個比喻，web framework就像是建築的主體，AJAX則是裝潢，一個結構穩固又適度裝潢的房子，才是最舒適的居住空間。只有裝潢的房子，其實就是樣品屋，雖然也可以住人，但是結構畢竟不穩。而過渡裝潢或沒有裝潢的房子，一樣讓人住起來不舒服。 <br /><br />總之，web framework是架構面，AJAX則偏重於UI處理，二者的角色是相輔相成才對，並沒有互相衝突。不管有沒有AJAX，不用 framework本來就還是可以開發 web ap，但我們從來就不會因此說 framework是多餘的，有了AJAX也是一樣的。</font></span></span><img src ="http://www.blogjava.net/govo/aggbug/68406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/govo/" target="_blank">govo</a> 2006-09-08 01:51 <a href="http://www.blogjava.net/govo/archive/2006/09/08/68406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让我们为梦想而努力</title><link>http://www.blogjava.net/govo/archive/2006/09/08/68404.html</link><dc:creator>govo</dc:creator><author>govo</author><pubDate>Thu, 07 Sep 2006 17:34:00 GMT</pubDate><guid>http://www.blogjava.net/govo/archive/2006/09/08/68404.html</guid><wfw:comment>http://www.blogjava.net/govo/comments/68404.html</wfw:comment><comments>http://www.blogjava.net/govo/archive/2006/09/08/68404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/govo/comments/commentRss/68404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/govo/services/trackbacks/68404.html</trackback:ping><description><![CDATA[今天鼓起勇气向管理员申请BlogJava，希望能以此激励自己，能在这最后一年的大学活里，更加努力！<img src ="http://www.blogjava.net/govo/aggbug/68404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/govo/" target="_blank">govo</a> 2006-09-08 01:34 <a href="http://www.blogjava.net/govo/archive/2006/09/08/68404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>