﻿<?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-兼容并包，思想自由-随笔分类-10.Web表示层基础(html/javascript/jsp/servlet)</title><link>http://www.blogjava.net/Steven-Liu/category/9305.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:45:12 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:45:12 GMT</pubDate><ttl>60</ttl><item><title>javascript中一个事件激活多个函数</title><link>http://www.blogjava.net/Steven-Liu/archive/2006/04/06/39606.html</link><dc:creator>Steven Liu</dc:creator><author>Steven Liu</author><pubDate>Thu, 06 Apr 2006 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-Liu/archive/2006/04/06/39606.html</guid><wfw:comment>http://www.blogjava.net/Steven-Liu/comments/39606.html</wfw:comment><comments>http://www.blogjava.net/Steven-Liu/archive/2006/04/06/39606.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-Liu/comments/commentRss/39606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-Liu/services/trackbacks/39606.html</trackback:ping><description><![CDATA[
		<p>
				<strong>
						<font color="#ff9900" size="4">问题描述:</font>
				</strong>
				<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body </span>
				<span style="COLOR: #ff0000">onLoad</span>
				<span style="COLOR: #0000ff">="MM_timelinePlay('Timeline1')"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<img src="http://www.blogjava.net/images/dot.gif" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<img src="http://www.blogjava.net/images/dot.gif" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>即document.body.onload事件已经绑定了一个函数。<br />现需要onload时激活另外一个函数，如<font color="#0066ff">enetgetMsg()，</font>如何处理？<br /><br /><font color="#ff66ff" size="4"><strong>解决方案：<br /></strong><font color="#000000">alert(<font size="3">document.body.onload.toString())<br />弹出窗口的内容为：<br />function anonymous()<br />{<br />　　<font color="#0000ff">MM_timelinePlay('Timeline1')</font><br />}<br />可见，当对onload绑定一个函数时，javascript自定义了一个函数，在该自定义函数体内调用了该绑定函数。<br />解决方法一：<br />重新写一函数，<br /><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_67_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_67_Open_Text.style.display='none'; Codehighlighter1_21_67_Closed_Image.style.display='inline'; Codehighlighter1_21_67_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_67_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_67_Closed_Text.style.display='none'; Codehighlighter1_21_67_Open_Image.style.display='inline'; Codehighlighter1_21_67_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> bodyOnload()</span><span id="Codehighlighter1_21_67_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_67_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />MM_timelinePlay('Timeline1');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />enetgetMsg();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body </span><span style="COLOR: #ff0000">onLoad</span><span style="COLOR: #0000ff">="bodyOnload()"</span><span style="COLOR: #0000ff">&gt;</span></div>解决方法二：<br />利用javascript重定义函数的功能，<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">newBodyload</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">enetgetMsg();</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(document.body.onload)<br /><img id="Codehighlighter1_54_199_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_199_Open_Text.style.display='none'; Codehighlighter1_54_199_Closed_Image.style.display='inline'; Codehighlighter1_54_199_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_54_199_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_199_Closed_Text.style.display='none'; Codehighlighter1_54_199_Open_Image.style.display='inline'; Codehighlighter1_54_199_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_54_199_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_54_199_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />eval(document.body.onload.toString().replace('anonymous()','oldBodyload()'));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />document.body.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Function(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">oldBodyload();</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">newBodyload);<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><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> document.body.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Function(newBodyload);</span></div></font></font></font>显然，第二种方法更好，因为这种方法实现时不必关心以前这个事件绑定了多少个函数，不需修改原先的代码，透明地增加一个函数。（decorate模式：透明地增加功能<img height="19" src="http://www.blogjava.net/Emoticons/regular_smile.gif" width="19" border="0" />）<img src ="http://www.blogjava.net/Steven-Liu/aggbug/39606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-Liu/" target="_blank">Steven Liu</a> 2006-04-06 15:59 <a href="http://www.blogjava.net/Steven-Liu/archive/2006/04/06/39606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>