??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久亚洲av成人无码电影,亚洲av永久无码制服河南实里 ,亚洲情XO亚洲色XO无码http://www.tkk7.com/jasonwbd/category/34807.htmlFirst know how, Second know why !zh-cnFri, 26 Dec 2008 23:45:29 GMTFri, 26 Dec 2008 23:45:29 GMT60javascript的作用域和闭?/title><link>http://www.tkk7.com/jasonwbd/articles/247884.html</link><dc:creator>D于渊</dc:creator><author>D于渊</author><pubDate>Tue, 23 Dec 2008 03:20:00 GMT</pubDate><guid>http://www.tkk7.com/jasonwbd/articles/247884.html</guid><wfw:comment>http://www.tkk7.com/jasonwbd/comments/247884.html</wfw:comment><comments>http://www.tkk7.com/jasonwbd/articles/247884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jasonwbd/comments/commentRss/247884.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jasonwbd/services/trackbacks/247884.html</trackback:ping><description><![CDATA[<p>作?潇湘客老师<br /> <br /> 闭包是通过在对一个函数调用的执行环境中返回一个函数对象构成的。比如,在对函数调用的过E中Q将一个对内部函数对象的引用指定给另一个对象的属性。或者,直接这样一个(内部Q函数对象的引用指定l一个全局变量、或者一个全局性对象的属性,或者一个作为参C引用方式传递给外部函数的对象。例如:- </p> <p>function exampleClosureForm(arg1, arg2){<br /> var localVar = 8;<br /> function exampleReturned(innerArg){<br /> return ((arg1 + arg2)/(innerArg + localVar));<br /> }<br /> /* q回一个定义ؓ exampleReturned 的内部函数的引用 -:- */ return exampleReturned;<br /> }</p> <p>var globalVar = exampleClosureForm(2, 4);<br /> q种情况下,在调用外部函?exampleClosureForm 的执行环境中所创徏的函数对象就不会被当作垃圾收集,因ؓ该函数对象被一个全局变量所引用Q而且仍然是可以访问的Q甚臛_以通过 globalVar(n) 来执行?</p> <p>的确Q情冉|正常的时候要复杂一些。因为现在这个被变量 globalVar 引用的内部函数对象的 [[scope]] 属性所引用的作用域链中Q包含着属于创徏该内部函数对象的执行环境的活动对象(和全局对象Q。由于在执行?globalVar 引用的函数对象时Q每ơ都要把该函数对象的 [[scope]] 属性所引用的整个作用域链添加到创徏的(内部函数的)执行环境的作用域中(x时的作用域中包括Q内部执行环境的zd对象、外部执行环境的zd对象、全局对象。译者注Q, 所以这个(外部执行环境的)zd对象不会被当作垃圾收集?</p> <p>闭包因此而构成。此Ӟ内部函数对象拥有自由的变量,而位于该函数作用域链中的zdQ可变)对象则成Z变量l定的环境?</p> <p>׃zdQ可变)对象受限于内部函数对象(现在?globalVar 变量引用Q的 [[scope]] 属性中作用域链的引用,所以活动对象连同它的变量声明-Q即属性的|都会被保留。而在对内部函数调用的执行环境中进行作用域解析Ӟ会把与zdQ可变)对象的命名属性一致的标识W作对象的属性来解析。活动对象的q些属性值即使是在创建它的执行环境退出后Q仍然可以被d和设|?</p> <p>在上面的例子中,当外部函数返回(退出它的执行环境)Ӟ其活动(可变Q对象的变量声明中记录了形式参数、内部函数定义以及局部变量的倹{arg1 属性的gؓ 2Q?arg2 属性的gؓ 4QlocalVar 的值是 8Q还有一?exampleReturned 属性,它引用由外部函数q回的内部函数对象。(为方便v见,我们在后面的讨ZQ称q个zd<可变>对象?"ActOuter1"Q?</p> <p>如果再次调用 exampleClosureForm 函数Q如Q? </p> <p>var secondGlobalVar = exampleClosureForm(12, 3);<br /> - 则会创徏一个新的执行环境和一个新的活动对象。而且Q会q回一个新的函数对象,该函数对象的 [[scope]] 属性引用的作用域链与前一ơ不同,因ؓq一ơ的作用域链中包含着W二个执行环境的zd对象Q而这个活动对象的属?arg1 gؓ 12 而属?arg2 gؓ 3。(为方便v见,我们在后面的讨ZQ称q个zd<可变>对象?"ActOuter2"Q?</p> <p>通过W二ơ执?exampleClosureForm 函数Q第二个、也是截然不同的闭包诞生了?</p> <p>通过执行 exampleClosureForm 创徏的两个函数对象分别被指定l了全局变量 globalVar ?secondGlobalVarQƈq回了表辑ּ ((arg1 + arg2)/(innerArg + localVar))。该表达式对其中的四个标识符应用了不同的操作W。如何确定这些标识符的值是体现闭包价值的关键所在?</p> <p>我们来看一看,在执行由 globalVar 引用的函数对象-Q如 globalVar(2)Q-时的情Ş。此Ӟ会创Z个新的执行环境和相应的活动对象(我们称之ؓ“ActInner1”Q,q把该活动对象添加到执行的函数对象的 [[scope]] 属性所引用的作用域铄前端。ActInner1 会带有一个属?innerArgQ根据传递的形式参数Q其D指定?2。这个新执行环境的作用域铑֏成: ActInner1->ActOuter1->全局对象. </p> <p>Zq回表达?((arg1 + arg2)/(innerArg + localVar)) 的|要沿着作用域链q行标识W解析。表辑ּ中标识符的值将通过依次查找作用域链中每个对象(与标识符名称一_的属性来定?</p> <p>作用域链中的W一个对象是 ActInner1Q它有一个名?innerArg 的属性,值是 2。所有其他三个标识符?ActOuter1 中都有对应的属性:arg1 ?2Qarg2 ?4 ?localVar ?8。最后,函数调用q回 ((2 + 2)/(2 + 8))?</p> <p>现在再来看一看由 secondGlobalVar 引用的同一个函数对象的执行情况Q比?secondGlobalVar(5)。我们把q次创徏的新执行环境的活动对象称?“ActInner2”Q相应的作用域链变成了QActInner2->ActOuter2->全局对象。ActInner2 q回 innerArg 的?5Q?ActOuter2 分别q回 arg1、arg2 ?localVar 的?12? ?8。函数调用返回的值就?((12 + 3)/(5 + 8))?</p> <p>如果再执行一?secondGlobalVarQ则又会有一个新zd对象被添加到作用域链的前端,?ActOuter2 仍然是链中的W二个对象,而他的命名属性会再次用于完成标识W?arg1、arg2 ?localVar 的解析?</p> <p>q就?ECMAScript 的内部函数获取、维持和讉K创徏他们的执行环境的形式参数、声明的内部函数以及局部变量的q程。这个过E说明了构成闭包以后Q内部的函数对象在其存箋q程中,如何l持对这些值的引用、如何对q些D行读取的机制。即Q创建内部函数对象的执行环境的活动(可变Q对象,会保留在该函数对象的 [[scope]] 属性所引用的作用域链中。直到所有对q个内部函数的引用被释放Q这个函数对象才会成为垃圾收集的目标Q连同它的作用域链中M不再需要的对象Q?</p> <p>内部函数自n也可能有内部函数。在通过函数执行q回内部函数构成闭包以后Q相应的闭包自n也可能会q回内部函数从而构成它们自q闭包。每ơ作用域铑ֵ套,都会增加由创建内部函数对象的执行环境引发的新zd对象。ECMAScript 规范要求作用域链是时性的Q但对作用域铄长度却没有加以限制。在具体实现中,可能会存在实际的限制Q但q没有发现有具体限制数量的报告。目前来看,嵌套的内部函数所拥有的潜能,仍然出了用它们的人的惛_能力?<br />  <br /> UID50579 帖子297 _֍0 下蝲?14 ?金币236 ?阅读权限200 在线旉131 时 注册旉2008-10-2 最后登?008-12-22 查看个h|站</p> <p>查看详细资料<br />  引用 使用道具 报告 回复 TOP <br />  <br /> </p> <img src ="http://www.tkk7.com/jasonwbd/aggbug/247884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jasonwbd/" target="_blank">D于渊</a> 2008-12-23 11:20 <a href="http://www.tkk7.com/jasonwbd/articles/247884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript后台菜单http://www.tkk7.com/jasonwbd/articles/247606.htmlD于渊D于渊Sun, 21 Dec 2008 03:45:00 GMThttp://www.tkk7.com/jasonwbd/articles/247606.htmlhttp://www.tkk7.com/jasonwbd/comments/247606.htmlhttp://www.tkk7.com/jasonwbd/articles/247606.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247606.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247606.htmlhttp://lxbzj.com/upload/200604/navbar.htm

D于渊 2008-12-21 11:45 发表评论
]]>
addEventListenerQ有用的W记http://www.tkk7.com/jasonwbd/articles/247593.htmlD于渊D于渊Sun, 21 Dec 2008 02:07:00 GMThttp://www.tkk7.com/jasonwbd/articles/247593.htmlhttp://www.tkk7.com/jasonwbd/comments/247593.htmlhttp://www.tkk7.com/jasonwbd/articles/247593.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247593.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247593.htmlZ么用 addEventListener

  • 可以对同一物g的同一事gl定多个事g处理E序?
  • 可以通过事g三个阶D|好地控制何时触发事g处理E序?
  • 工作?DOM 元素Q而不仅是 HTML 元素?/li>

事g分发时添?eventListener

不会立即触发 eventListenerQ可能会在下一个事件流Q比如冒泡阶D)中触发?/p>

多个相同?eventListener

如下Q三个参数完全相同,q且W二个参C是匿名函数?/p>

document.getElementById("myBox").addEventListener("click", Go, false);
document.getElementById("myBox").addEventListener("click", Go, false);
document.getElementById("myBox").addEventListener("click", Go, false);

会抛弃多余的Q只保留一个,对应?removeEventListener 也只用一ơ就可以了(removeEventListener 用法?addEventListener 完全相同Q?/p>

但如果是W二个参数是匿名函数Q比如:

document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);
document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);
document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);

则三个均有效Qƈ且无法用 removeEventListener 除去?/p>

this

事g处理E序中,this 变成了触发事件的控gQ但我们仍推荐用 event.target ?event.currentTarget?/p>

早期的事件监?/span>

?DOM0 中,我们?obj.onclick = FuncNameQ由于兼Ҏ好Q应用非常广泛,只是功能不如 addEventListener 强大?/p>

内存问题

前面提到了许多用域名函数的地方Q有时这是没办法的,请参?a target="_blank">在各览器中动态添加事Ӟ参数?/a>Q但q会D内存问题?/p>

一旦事件绑定之后,该绑定代?a target="_blank">作用?/a>的变量就都保留下来,不会?JavaScript 引擎回收Q这可能会引起占用大量内存的问题Q由?removeEventListener 无法删除匿名函数的事件处理程序,只有在物Ӟ比如按钮Q去除之后,该内存才可能得到回收?/p>

D于渊 2008-12-21 10:07 发表评论
]]>
addEventListenerQevent 对象的属性和Ҏhttp://www.tkk7.com/jasonwbd/articles/247592.htmlD于渊D于渊Sun, 21 Dec 2008 02:04:00 GMThttp://www.tkk7.com/jasonwbd/articles/247592.htmlhttp://www.tkk7.com/jasonwbd/comments/247592.htmlhttp://www.tkk7.com/jasonwbd/articles/247592.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247592.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247592.html事g触发Ӟ会将一?Event 对象传递给事g处理E序Q比如:

1 document.getElementById("testText").addEventListener("keydown"function (event) { alert(event.keyCode); }, false);

事gcd

DOM 事gcd是分?UIEvent、UIEvent:KeyEvent、UIEvent:MouseEventQ不同的事g有不同的属性和ҎQ但常用的来说我们都不会用错Q比如我们不会在鼠标事g中去取键盘|Ctrl、Alt、Shift 除外Q,所以我们没有必要深I?/p>

该对象的属性和Ҏ有:

view 只读Q对象,发生事g?Window 对象?/p>

type 只读Q字W串。比如鼠标点M件的cdQclick?/p>

eventPhase 只读Q数字,事g正l历的阶Dc?Q捕P2Q目标,3Q冒泡?/p>

target 只读Q对象,z֏事g的目标对象。比如鼠标是点击在哪个按钮上的?/p>

currentTarget 只读Q对象,当前正在调用监听器的对象Q也是当前 addEventListener 是绑定在哪个对象上的?/p>

timeStamp 只读Q数字,用毫U表CZ件发生时距计机开机的旉?/p>


cancelable 只读Q布,处理事g的默认行为是否可以停止。主要针对一些系l事Ӟ如果gؓ trueQ则 event ?preventDefault Ҏ可以使用Q否则不可用?/p>

preventDefault() L览器的默认行ؓQ比如在文本框中打字触发 keydownQ如?keydown 事g处理E序中调用了 preventDefault()Q所打的字就不会跑到文本框中去,注意Q此时不要弹?alert 对话框,否则可能不v作用。IE 中在事g处理E序中用 return false 实现cM功能?/p>


bubbles 只读Q布,事g是否开启冒泡功能?/p>

stopImmediatePropagation q个东西?JavaScript 中是个属性,而不是方法,布尔Q但具体试q未发现其用途,不知是不?bug?/p>

stopPropagation() 停止当前的事件流传播Q但不会停止当前正在处理的对象。IE 中用 event.cancelBubble =  true 实现cM功能?/p>

cancelBubble 布尔Q是否取消冒泡,不徏议?/span>Q用 stopPropagation() 代替?/p>

preventBubble() L冒Q?span class="caution">不徏议?/span>Q用 stopPropagation() 代替?/p>

preventCapture() L捕获Q?span class="caution">不徏议?/span>Q用 stopPropagation() 代替?/p>


detail 只读Q数字,提供旉的额外信息,对于 click 事g、mousedown 事g?mouseup 事gQ这个字D代表点ȝơ数?/p>

isChar 只读Q布,按下的按键值是否是字符Q比如按?Ctrl 键时Q就q回 false。不q您?Firefox 中测试时Q该值L falseQFirefox 官方已经说明q是一?bug?/p>

altKey 只读Q布,是否按下?Alt 键?/p>

ctrlKey 只读Q布,是否按下?Ctrl 键?/p>

shiftKey 只读Q布,是否按下?Shift 键?/p>

metaKey 只读Q布,是否按下?Meta 键?/p>


下面一些属性很有意思,请仔l区别?/span>

charCode 只读Q数字,字符Q英文、数字、符P?Unicode 倹{?/p>

  • 只用?keypress?/li>

keyCode 只读Q数字,键盘按键倹{?/p>

  • 用于 keypress Ӟq回非字W按键|?Ctrl、Shift、Alt、Caps Lock、单行文本框中按向上键等Q;
  • 用于 keydown、keyup Ӟq回L键倹{?/li>

button 只读Q数字,鼠标按键倹{?/p>

  • 用于 click Ӟ0Q左键?
  • 用于 mousedown、mouseup Ӟ0Q左键,1Q中间键Q滚轮)Q?Q右键?/li>

which 只读Q数字,键盘按键值或鼠标按键倹{?/p>

  • 用于 keypress Ӟ{同?charCode + 回退?+ 回R键;
  • 用于 keydown、keyup Ӟq回L键|
  • 用于 click Ӟ1Q左键,?button 的值略有区别?
  • 用于 mousedown、mouseup Ӟ1Q左键,2Q中间键Q滚轮)Q?Q右键,?button 的值略有区别?/li>

可以看出Qwhich 只有一Ҏ有包括:那就?keypress Ӟ不如 keyCode 那么全,但实际上Qkeypress 事g中用于非字符键的情况较少Q所以一般还是用 which 代替全部?/span>



D于渊 2008-12-21 10:04 发表评论
]]>
addEventListenerQ第三个参数 useCapturehttp://www.tkk7.com/jasonwbd/articles/247591.htmlD于渊D于渊Sun, 21 Dec 2008 02:02:00 GMThttp://www.tkk7.com/jasonwbd/articles/247591.htmlhttp://www.tkk7.com/jasonwbd/comments/247591.htmlhttp://www.tkk7.com/jasonwbd/articles/247591.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247591.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247591.htmladdEventListener 有三个参敎ͼW一个参数表CZ件名Uͼ不含 onQ如 "click"Q;W二个参数表C接收事g处理的函敎ͼW三个参Cؓ useCaptureQ本文就讲解它?/p>
1 <div id="outDiv">
2   <div id="middleDiv">
3     <div id="inDiv">请在此点击鼠标?/span></div>
4   </div>
5 </div>
6 
7 <div id="info"></div>

 

1 var outDiv = document.getElementById("outDiv");
2 var middleDiv = document.getElementById("middleDiv");
3 var inDiv = document.getElementById("inDiv");
4 var info = document.getElementById("info");
5  
6 outDiv.addEventListener("click"function () { info.innerHTML += "outDiv" + "<br>"; }, false);
7 middleDiv.addEventListener("click"function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
8 inDiv.addEventListener("click"function () { info.innerHTML += "inDiv" + "<br>"; }, false);

上述是我们测试的代码Q根?info 的显C来定触发的顺序,有三?addEventListenerQ?useCapture 可选gؓ true ?falseQ所?2*2*2Q可以得?8 D不同的E序?/p>

  • 全ؓ false Ӟ触发序为:inDiv、middleDiv、outDivQ?
  • 全ؓ true Ӟ触发序为:outDiv、middleDiv、inDivQ?
  • outDiv ?trueQ其他ؓ false Ӟ触发序为:outDiv、inDiv、middleDivQ?
  • middleDiv ?trueQ其他ؓ false Ӟ触发序为:middleDiv、inDiv、outDivQ?
  • ……

最l得出如下结论:

  • true 的触发顺序L?false 之前Q?
  • 如果多个均ؓ trueQ则外层的触发先于内层;
  • 如果多个均ؓ falseQ则内层的触发先于外层?/li>

下面提供全部代码Q您可以更改其中?true、false |来进行测试。注意,不适用?IE?br />

 1 <?xml version="1.0" encoding="gb2312"?>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 
 5 <head>
 6 <meta http-equiv="Content-Language" content="zh-cn" />
 7 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 8 <title>useCapture</title>
 9 <style type="text/css">
10 #outDiv
11 {
12     padding:10px 10px 10px 10px;
13     border:1px solid red;
14 }
15 
16 #middleDiv
17 {
18     padding:10px 10px 10px 10px;
19     border:1px solid green;
20 }
21 
22 #inDiv
23 {
24     padding:10px 10px 10px 10px;
25     border:1px solid blue;
26 }
27 </style>
28 </head>
29 
30 <body>
31 
32 <div id="outDiv">
33   <div id="middleDiv">
34     <div id="inDiv">请在此点击鼠标?/span></div>
35   </div>
36 </div>
37 
38 <div id="info"></div>
39 
40 <script language="javascript" type="text/javascript">
41 <!--
42 //千一|络 www.cftea.com
43 
44 var outDiv = document.getElementById("outDiv");
45 var middleDiv = document.getElementById("middleDiv");
46 var inDiv = document.getElementById("inDiv");
47 var info = document.getElementById("info");
48  
49 outDiv.addEventListener("click"function () { info.innerHTML += "outDiv" + "<br>"; }, false);
50 middleDiv.addEventListener("click"function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
51 inDiv.addEventListener("click"function () { info.innerHTML += "inDiv" + "<br>"; }, false);
52 //-->
53 </script>
54 
55 </body>
56 
57 </html>


D于渊 2008-12-21 10:02 发表评论
]]>
addEventListenerQ事件流http://www.tkk7.com/jasonwbd/articles/247589.htmlD于渊D于渊Sun, 21 Dec 2008 01:57:00 GMThttp://www.tkk7.com/jasonwbd/articles/247589.htmlhttp://www.tkk7.com/jasonwbd/comments/247589.htmlhttp://www.tkk7.com/jasonwbd/articles/247589.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247589.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247589.html说到 addEventListener 不得不说C件流Q先说事件流对后面的解释比较方便?/p>

当一个事件发生时Q分Z个阶D:

捕获阶段 从根节点开始顺序而下Q检每个节Ҏ否注册了事g处理E序。如果注册了事g处理E序Qƈ?useCapture ?trueQ则调用该事件处理程序。(IE 中无此阶Dc)

目标阶段 触发在目标对象本w注册的事g处理E序Q也U?span class="itemTitle">正常事gz֏阶段?/p>

冒阶段 从目标节点到根节点,每个节Ҏ否注册了事g处理E序Q如果注册了事g处理E序Qƈ?useCapture ?falseQ则调用该事件处理程序?

举例

1 <div id="div1">
2   <div id="div2">
3     <div id="div3">
4       <div id="div4">
5       </div>
6     </div>
7   </div>
8 </div>

如果?d3 上点击鼠标,事g是q样的:

捕获阶段 ?div1 处检是否有 useCapture ?true 的事件处理程序,若有Q则执行该程序,然后再同样地处理 div2?/p>

目标阶段 ?div3 处,发现 div3 是鼠标点击的节点,所以这里ؓ目标阶段Q若有事件处理程序,则执行该E序Q这里不?useCapture ?true q是 false?/p>

冒阶段 ?div2 处检是否有 useCapture ?false 的事件处理程序,若有Q则执行该程序,然后再同样地处理 div1?/p>

注意Q上q捕获阶D和冒阶段中,实际?div1 之上q应该有l点Q比如有 bodyQ但q里不讨论?/p>

D于渊 2008-12-21 09:57 发表评论
]]>
addEventListenerQ开?/title><link>http://www.tkk7.com/jasonwbd/articles/247588.html</link><dc:creator>D于渊</dc:creator><author>D于渊</author><pubDate>Sun, 21 Dec 2008 01:54:00 GMT</pubDate><guid>http://www.tkk7.com/jasonwbd/articles/247588.html</guid><wfw:comment>http://www.tkk7.com/jasonwbd/comments/247588.html</wfw:comment><comments>http://www.tkk7.com/jasonwbd/articles/247588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jasonwbd/comments/commentRss/247588.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jasonwbd/services/trackbacks/247588.html</trackback:ping><description><![CDATA[<p>前面零散地写了些关于 addEventListener 的内容,觉得比较散,有些地方可能也说得不够清楚明白,所以决定以q蝲的Ş式从头到ֆ写一?/p> <p>addEventListener 用于注册事g处理E序QIE 中ؓ <a target="_blank">attachEvent</a>Q我们ؓ什么讲 addEventListener 而不?attachEvent 呢?一?attachEvent 比较单,二来 addEventListener 才是 DOM 中的标准内容?/p> <p><span id="muysusi" class="itemTitle">?/span></p> <p>addEventListener 为文档节炏Vdocument、window ?XMLHttpRequest 注册事g处理E序Q在以前我们一般是 <input type="button" onclick="..."Q或 document.getElementById("testButton").onclick = FuncNameQ?nbsp;而在 DOM 中,我们?addEventListenerQIE 中用 attachEventQ?/p> <p><span id="yqauoom" class="itemTitle">语法</span></p> <div id="oyqswck" class="code">target.addEventListener(type, listener, useCapture);</div> <ul> <li><span id="wqkuwms" class="key">target</span> 文档节点、document、window ?XMLHttpRequest? <li><span id="muysuki" class="key">type</span> 字符Ԍ事g名称Q不?#8220;on”Q比?#8220;click”?#8220;mouseover”?#8220;keydown”{? <li><span id="iuqiekq" class="key">listener</span> 实现?EventListener 接口或者是 JavaScript 中的函数? <li><span id="aikoqgu" class="key">useCapture</span> 是否使用捕捉Q看了后面的事g一节后明白了Q一般用 false?</li> </ul> <p><span id="wyiueci" class="itemTitle">CZ</span></p> <div id="wwacoes" class="code"> <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: #0000ff">function</span><span style="color: #000000"> Go()<br /> </span><span style="color: #008080">2</span> <span style="color: #000000">{<br /> </span><span style="color: #008080">3</span> <span style="color: #000000">    </span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.tkk7.com/Images/dot.gif" alt="" /></span><span style="color: #008000"><br /> </span><span style="color: #008080">4</span> <span style="color: #000000">}<br /> </span><span style="color: #008080">5</span> <span style="color: #000000"><br /> </span><span style="color: #008080">6</span> <span style="color: #000000">document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">testButton</span><span style="color: #000000">"</span><span style="color: #000000">).addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">, Go, </span><span style="color: #0000ff">false</span><span style="color: #000000">);</span></div> </div> <p>或?listener 直接是函数</p> <div id="wwyacsa" class="code"> <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">document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">testButton</span><span style="color: #000000">"</span><span style="color: #000000">).addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">function</span><span style="color: #000000"> () { <img src="http://www.tkk7.com/Images/dot.gif" alt="" /> }, </span><span style="color: #0000ff">false</span><span style="color: #000000">);</span></div> </div> <img src ="http://www.tkk7.com/jasonwbd/aggbug/247588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jasonwbd/" target="_blank">D于渊</a> 2008-12-21 09:54 <a href="http://www.tkk7.com/jasonwbd/articles/247588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS:attachEvent和addEventListener 使用Ҏhttp://www.tkk7.com/jasonwbd/articles/247587.htmlD于渊D于渊Sun, 21 Dec 2008 01:48:00 GMThttp://www.tkk7.com/jasonwbd/articles/247587.htmlhttp://www.tkk7.com/jasonwbd/comments/247587.htmlhttp://www.tkk7.com/jasonwbd/articles/247587.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/247587.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/247587.html

JS:attachEvent和addEventListener 使用Ҏ

attachEventҎQؓ某一事g附加其它的处理事件。(不支持MozillapdQ?br />
addEventListenerҎ 用于 Mozillapd

举例:
document.getElementById("btn").onclick = method1;
document.getElementById(
"btn").onclick = method2;
document.getElementById(
"btn").onclick = method3;
如果q样?那么会只有medhot3被执?br />
写成q样Q?br />
var btn1Obj = document.getElementById("btn1"); 
//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent(
"onclick",method2);
btn1Obj.attachEvent(
"onclick",method3);
执行序为method3->method2->method1

如果是MozillapdQƈ不支持该ҎQ需要用到addEventListener
var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener(
"click",method2,false);
btn1Obj.addEventListener(
"click",method3,false);
执行序为method1->method2->method3

使用实例Q?br />
1?nbsp;
var el = EDITFORM_DOCUMENT.body; 
//先取得对象,EDITFORM_DOCUMENT实ؓ一个iframe
if (el.addEventListener){
 el.addEventListener(
'click', KindDisableMenu, false);
}
 else if (el.attachEvent){
 el.attachEvent(
'onclick', KindDisableMenu);
}

2?nbsp;
if (window.addEventListener) {
 window.addEventListener(
'load', _uCO, false);
}
 else if (window.attachEvent) {
 window.attachEvent(
'onload', _uCO);
}


D于渊 2008-12-21 09:48 发表评论
]]>
JavaScript(js)静态页面传gCookie?/title><link>http://www.tkk7.com/jasonwbd/articles/245662.html</link><dc:creator>D于渊</dc:creator><author>D于渊</author><pubDate>Thu, 11 Dec 2008 04:32:00 GMT</pubDate><guid>http://www.tkk7.com/jasonwbd/articles/245662.html</guid><wfw:comment>http://www.tkk7.com/jasonwbd/comments/245662.html</wfw:comment><comments>http://www.tkk7.com/jasonwbd/articles/245662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jasonwbd/comments/commentRss/245662.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jasonwbd/services/trackbacks/245662.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt; color: #808000">  </p> <p>JavaScript(js)静态页面传gCookie加入时_2007-12-25 9:17:28  来源Q?nbsp; ~辑Q  利用Cookieq行静态页面g递:Cookie是浏览器存储量命名数据.它与某个特定的网||站兌在一赗?br />   Cookie用来l浏览器提供内存,以便脚本和服务器E序可以在一个页面中使用另一个页面的输入数据?br />   Post.htm<br /> 以下是引用片D:</p> <p> </p> <p style="font-size: 12pt">function setCookie(name,value)<br /> {<br /> /*<br /> *--------------- setCookie(name,value) -----------------<br /> * setCookie(name,value)<br /> * 功能:讄得变量name的?br /> * 参数:name,字符?value,字符?<br /> * 实例:setCookie('username','baobao')<br /> *--------------- setCookie(name,value) -----------------<br /> */<br />   var Days = 30; //?cookie 被保存 30 ?br />   var exp = new Date();<br />   exp.setTime(exp.getTime() + Days*24*60*60*1000);<br />   document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();<br />   location.href = "Read.htm"; //接收面.<br /> }</p> <p>  Read.htm<br /> 以下是引用片D:</p> <p>function getCookie(name)<br /> {<br /> /*<br /> *--------------- getCookie(name) -----------------<br /> * getCookie(name)<br /> * 功能:取得变量name的?br /> * 参数:name,字符?<br /> * 实例:alert(getCookie("baobao"));<br /> *--------------- getCookie(name) -----------------<br /> */<br />   var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));<br />   if(arr !=null) return unescape(arr[2]); return null;<br /> }<br /> alert(getCookie("baobao"));</p> <p>  优点:可以在同源内的Q意网内讉K.生命期可以设|?<br />   ~点:值长度有限制.<br /> 本文转自州IT信息|?http://www.fzic.net)<br /> 本文转自可可在线(http://www.rcinn.cn),详细出处参考:http://www.xqke.cn/news.asp?id=475</p> <p> </p> </span> <img src ="http://www.tkk7.com/jasonwbd/aggbug/245662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jasonwbd/" target="_blank">D于渊</a> 2008-12-11 12:32 <a href="http://www.tkk7.com/jasonwbd/articles/245662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js面接传值问?/title><link>http://www.tkk7.com/jasonwbd/articles/245661.html</link><dc:creator>D于渊</dc:creator><author>D于渊</author><pubDate>Thu, 11 Dec 2008 04:24:00 GMT</pubDate><guid>http://www.tkk7.com/jasonwbd/articles/245661.html</guid><wfw:comment>http://www.tkk7.com/jasonwbd/comments/245661.html</wfw:comment><comments>http://www.tkk7.com/jasonwbd/articles/245661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jasonwbd/comments/commentRss/245661.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jasonwbd/services/trackbacks/245661.html</trackback:ping><description><![CDATA[<span style="color: #808000">JSP数据和JavaScirpt数据交互使用问题的一U解x?<br /> 对于WEBE序来说Q前端(JavaScriptQ和后端QJSP/ServletQ是没法q数据的,只能是后端程序(JSPQ把数据输出Q生成页面到前端Q这时候生成的面中的JavaScript代码才有可能得到所谓jsp的数据。同LQ只有把JavaScript里的数据提交l后端JSP代码QJSPE序中才能得到JavaScript的数据?<br /> <br /> 那如何实现在面的JavaScript中用jsp中的数据或是在jsp中用页面的JavaScript数据呢? <br /> <br /> 一、页面中的JavaScript的数据如何提交给后台的jspE序 <br /> ?可以JavaScript的数据以xxx.JSP?var1=aaa&var2=bbb的Ş式作为URL的参ClJSPE序Q此时在jsp中用 <br /> <%String strVar1=request.getParameter("var1");%>可以获取到JavaScript脚本传递过来的数据Q?<br /> ?使用JavaScript通过在表单里加入隐藏域信息,然后用表单提交的方式把数据传递给JSPE序?<br /> <br /> 参考下面的脚本Q?<br /> <script language="JavaScript"> <br /> <!-- <br /> /*************************************************************** <br /> * JavaScript脚本Q放|在面中的M位置都可?<br /> * insertclick()函数获取JSP传递到面中的变量varMCQ?<br /> * 然后可以在JavaScript中修改这个变量的|再通过 <br /> * post的方式提交给JSPE序来用?<br /> ***************************************************************/ <br /> function insertclick(){ <br /> var1 = document.all.mc.value; //获取面form中的变量?<br /> var1 = var1 + "名称"; <br /> document.insertForm.submit(); <br /> } <br /> //--> <br /> </script> <br /> <br /> <!-- html面form表单Q放|在html面中的位置不限 --> <br /> <form name="insertForm" method="post" action="yourJSP"> <br /> <!-- 下面q一句是获取JSPE序中传递过来的变量?--> <br /> <input type="hidden" name="mc" value="<%=varMC%>"> <br /> <input type="button" value="提交" onclick="insertclick()"> <br /> </form> <br /> <br /> 二、页面中的JavaScript的数据如何用后台的JSPE序的数?<br /> q个比较单,直接在JavaScript脚本中用<%QstrVar1%>可以把jspE序中的数据传递给JavaScript脚本使用了?<br /> <br /> 参考下面的脚本Q?<br /> <br /> <!-- html面form表单Q放|在html面中的位置不限 --> <br /> <form name="insertForm" method="post" action="yourJSP"> <br /> <input type="hidden" name="mc" value=""> <br /> </form> <br /> <br /> <script language="JavaScript"> <br /> <!-- <br /> /*************************************************************** <br /> * JavaScript脚本Q放|在面中form以后的Q何位|都可以 <br /> * 使用JavaScirpt获取JSP传递到面中的变量varMCQ?<br /> * 然后可以在JavaScript中用这个变量的|通过 <br /> * JavaScript脚本赋值给form中的隐藏域?<br /> ***************************************************************/ <br /> var1 = "<%=varMC%>"; //获取JSP中的变量?<br /> document.all.mc.value = var1; <br /> //--> <br /> </script></ca><br /> 参考资料:开发者在U?a target="_blank">http://www.builder.com.cn/</a></span> <img src ="http://www.tkk7.com/jasonwbd/aggbug/245661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jasonwbd/" target="_blank">D于渊</a> 2008-12-11 12:24 <a href="http://www.tkk7.com/jasonwbd/articles/245661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>|页表单常用的check.js代码http://www.tkk7.com/jasonwbd/articles/238877.htmlD于渊D于渊Wed, 05 Nov 2008 12:26:00 GMThttp://www.tkk7.com/jasonwbd/articles/238877.htmlhttp://www.tkk7.com/jasonwbd/comments/238877.htmlhttp://www.tkk7.com/jasonwbd/articles/238877.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/238877.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/238877.html
function LTrim(str){
var i;
for(i=0; i<str.length; i++){
  if(str.charAt(i)!=" ") break;
  str=str.substring(i,str.length) ;
  return str;
}
}

function RTrim(str){
var i ;
for(i=str.length-1; i>=0; i++){
  if(charAt(i)!=" ") break;
}
str = str.substring(0, i+1) ;
}

function Trim(str){
return LTrim(RTrim(str)) ;
}

function check(){
if(Trim(document.form1.title.value == "")){
  alert("Sorry ! title is Empty !") ;
  document.form1.title.focus() ;
  return false ;
}
if(Trim(document.form1.cont.value == "")){
  alert("Sorry ! cont is Empty !") ;
  document.form1.cont.focus() ;
  return false;
}
return true ;


D于渊 2008-11-05 20:26 发表评论
]]>
JSQ注册时Q需要过多少U后才能点确定的JS控制按钮可用与不可用Q?/title><link>http://www.tkk7.com/jasonwbd/articles/237585.html</link><dc:creator>D于渊</dc:creator><author>D于渊</author><pubDate>Thu, 30 Oct 2008 04:36:00 GMT</pubDate><guid>http://www.tkk7.com/jasonwbd/articles/237585.html</guid><wfw:comment>http://www.tkk7.com/jasonwbd/comments/237585.html</wfw:comment><comments>http://www.tkk7.com/jasonwbd/articles/237585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jasonwbd/comments/commentRss/237585.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jasonwbd/services/trackbacks/237585.html</trackback:ping><description><![CDATA[<p><span style="color: #808000"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></p> <p><span style="color: #808000"><html xmlns="http://www.w3.org/1999/xhtml"><br /> <head><br />     <title>无标题页</title><br />     <script type="text/javascript"><br />         var leftTime = 10;<br />         window.onload = initAll;<br />         function initAll()<br />         {<br />             show();<br />         }<br />         function show()<br />         {<br />             document.getElementById("btntest").value=leftTime;<br />             leftTime--;<br />             if(leftTime>0)<br />             {<br />                 setTimeout("show()",1000);<br />             }<br />             else<br />             {<br />                 document.getElementById("btntest").value="OK !";<br />                 document.form1.btntest.disabled=false;<br />             }<br />         }<br />     </script><br /> </head><br /> <body><br />     <form action="" name="form1"><br />         <input size="30" type="button" name="btntest" id="btntest" value="" disabled="true" /><br />     </form><br /> </body><br /> </html><br /> </span></p> <img src ="http://www.tkk7.com/jasonwbd/aggbug/237585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jasonwbd/" target="_blank">D于渊</a> 2008-10-30 12:36 <a href="http://www.tkk7.com/jasonwbd/articles/237585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP树Ş菜单的实现[转]http://www.tkk7.com/jasonwbd/articles/236258.htmlD于渊D于渊Thu, 23 Oct 2008 13:35:00 GMThttp://www.tkk7.com/jasonwbd/articles/236258.htmlhttp://www.tkk7.com/jasonwbd/comments/236258.htmlhttp://www.tkk7.com/jasonwbd/articles/236258.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/236258.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/236258.html1。原理简?br />  dtree是一个免费的javascript脚本Q只需定义有限的几个参敎ͼ可以做出漂亮的树型菜单。下载目录:http://www.destroydrop.com/javascripts/tree/
 以下是dtree的用法示例:
 1Q初始化菜单
 <script type="text/javascript">
  <!--
  var Tree = new Array;
  // nodeId | parentNodeId | nodeName | nodeUrl
  Tree[0]  = "1|0|Page 1|#";
  Tree[1]  = "2|1|Page 1.1|#";
  Tree[2]  = "3|1|Page 1.2|#";
  Tree[3]  = "4|3|Page 1.2.1|#";
  Tree[4]  = "5|1|Page 1.3|#";
  Tree[5]  = "6|2|Page 1.1.1|#";
  Tree[6]  = "7|6|Page 1.1.1.1|#";
  Tree[7]  = "8|6|Page 1.1.1.2|#";
  Tree[8]  = "9|1|Page 1.4|#";
  Tree[9]  = "10|9|Page 1.4.1|#";
  Tree[10] = "11|0|Page 2|#";
  //-->
 </script>
 2Q调用函?br />  <div class="tree">
  <script type="text/javascript">
  <!--
   createTree(Tree,1,7);  // starts the tree at the top and open it at node nr. 7
  //-->
  </script>
 </div>

 昄Q如果用动态的脚本来初始化菜单数组Qasp,jsp均可Q,那就可以很方便的实现动态的树型菜单了?/span>

2。jsp动态实?br />    分以下步骤实现动态的树型菜单Q?br />    1Q在数据库徏tree_info表,有nodeIdQparentNodeIdQnodeNameQnodeUrl四个字段Q来存储节点信息?br />    2Q编写javac,用于从数据库扑և节点信息Qƈ且生成javascript脚本?br />    3Q编写tagcR用于封装逻辑Q简化jsp的开发?br />    4Q徏一个webE序q行试?/span>

3。详l过E?br />    1Q在数据库徏表,脚本如下Q?br />    CREATE TABLE `test`.`tree_info` (
   `node_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,
   `parent_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,
   `node_name` VARCHAR(45) NOT NULL,
   `ref_url` VARCHAR(45) NOT NULL,
   PRIMARY KEY(`node_id`)
 )
 我用mysql数据库,如果脚本l节有出入,误行修?br />     按照上面的dTreeCZ插入数据
   2Q编写TreeInfo.javaQ这个类用于装节点信息
     package com.diegoyun.web.tree;
  /**
   * @author Diegoyun
   * @version 1.0
   */
  public class TreeInfo {
   private int nodeId = -1;//node id
   private int parentId = -1;//parentId
   private String nodeName = null;//node name
   private String url = null;//url references

   public int getNodeId() {
    return nodeId;
   }

   public void setNodeId(int nodeId) {
    this.nodeId = nodeId;
   }

   public int getParentId() {
    return parentId;
   }

   public void setParentId(int parentId) {
    this.parentId = parentId;
   }

   public String getNodeName() {
    return nodeName;
   }

   public void setNodeName(String nodeName) {
    this.nodeName = nodeName;
   }

   public String getUrl() {
    return url;
   }

   public void setUrl(String url) {
    this.url = url;
   }

  }
   ~写TreeUtil.javaQ用于从数据库得到节点信息,装到TreeInfo对象Qƈ生成javascript脚本
   TreeUtil.java
   package com.diegoyun.web.tree;
  import java.util.Collection;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.Connection;
  import java.sql.DriverManager;

  /**
   * @author Diegoyun
   * @version 1.0
   */
  public class TreeUtil {
   public static List retrieveNodeInfos(){
    List coll = new ArrayList();

    String driverName = "com.mysql.jdbc.Driver";
    String host = "localhost";
    String port = ":3306";
    String serverID = "test";
    String userName = "root";
    String userPwd = "root";
    String url = "jdbc:mysql://" + host + port + "/" + serverID ;

    Connection conn = null ;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try{
     Class.forName(driverName).newInstance();
     conn = DriverManager.getConnection(url , userName , userPwd);
     String sql = "select * from tree_info";
     ps = conn.prepareStatement(sql);
     rs = ps.executeQuery();

     TreeInfo info = null;
     while(rs!=null && rs.next()){
      info = new TreeInfo();
      info.setNodeId(rs.getInt(1));
      info.setParentId(rs.getInt(2));
      info.setNodeName(rs.getString(3));
      info.setUrl(rs.getString(4));
      coll.add(info);
     }
  //            if(rs!=null){
  //                rs.close();
  //                rs=null;
  //            }
  //            if(ps!=null){
  //                ps.close();
  //                ps=null;
  //            }
    }catch(Exception e){
     System.out.println(e);
    }


    return coll;
   }
   public static String createTreeInfo(List alist){
    StringBuffer contents = new StringBuffer();
    contents.append("<!--\n");
    contents.append("var Tree = new Array;");//create a array in javascript
    TreeInfo info =null;
    for(int max = alist.size(),i=0;i<max;i++){
     info = (TreeInfo)alist.get(i);
     //define elements of array
     contents.append("Tree[");
     contents.append(i);
     contents.append("]=\"");
     contents.append(info.getNodeId());
     contents.append("|");
     contents.append(info.getParentId());
     contents.append("|");
     contents.append(info.getNodeName());
     contents.append("|");
     contents.append(info.getUrl());
     contents.append("\";");
    }

contents.append("docment.writer(Tree);");
    contents.append("http://-->");

    return contents.toString();
   }
   public static void main(String[]args){
    List alist = TreeUtil.retrieveNodeInfos();
  //        TreeInfo info = null;
  //        for(Iterator i = c.iterator();i.hasNext();){
  //            info = (TreeInfo)i.next();
  //            System.out.println("*****" + info.getNodeName());
  //        }
    System.out.println(TreeUtil.createTreeInfo(alist));
   }
  }

 3)~写标签c?br />  InitTreeTag.java
 package com.diegoyun.web.taglibs;
 import com.diegoyun.web.tree.TreeUtil;
 import javax.servlet.jsp.tagext.TagSupport;
 import javax.servlet.jsp.JspException;
 import java.io.IOException;

 /**
  * @author Diegoyun
  * @version 1.0
  */
 public class InitTreeTag extends TagSupport{

  public int doEndTag() throws JspException {
   StringBuffer tree = new StringBuffer();
   tree.append("<script type=\"text/javascript\">\n");
   tree.append(TreeUtil.createTreeInfo(TreeUtil.retrieveNodeInfos()));
   tree.append("</script>\n");
   try{
    pageContext.getOut().println(tree.toString());
   }catch(IOException ioe){
    ioe.printStackTrace();
   }
   return super.doEndTag();
  }
 }

 ShowTreeTag.java :

 package com.diegoyun.web.taglibs;

 import javax.servlet.jsp.tagext.TagSupport;
 import javax.servlet.jsp.JspException;
 import java.io.IOException;

 /**
  * @author Diegoyun
  * @version 1.0
  */
 public class ShowTreeTag extends TagSupport{
  public int doEndTag() throws JspException {
   StringBuffer buffer = showTree();
   try {
    pageContext.getOut().println(buffer.toString());
   }
   catch (IOException ioe) {
    ioe.printStackTrace();
   }
   return super.doEndTag();
  }
  private StringBuffer showTree(){
   StringBuffer sb = new StringBuffer();
   sb.append("<div class=\"tree\">\n");
   sb.append("<script type=\"text/javascript\">\n");
   sb.append("<!--\n");
   sb.append("createTree(Tree);\n");
   sb.append("http://-->\n");
   sb.append("</script>\n");
   sb.append("</div>\n");
   return sb;
  }  
 }

 标签的tld如下Q?br />  <?xml version="1.0" encoding="ISO-8859-1" ?>
 <!DOCTYPE taglib
   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
 <taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>tree</short-name>
  <!--initTreeTag-->
  <tag>
   <name>init</name>
   <tag-class>com.diegoyun.web.taglibs.InitTreeTag</tag-class>
   <body-content>empty</body-content>
  </tag>
  <!--ShowTreeTag-->
  <tag>
   <name>show</name>
   <tag-class>com.diegoyun.web.taglibs.ShowTreeTag</tag-class>
   <body-content>empty</body-content>
  </tag>
 </taglib>

 4Q徏立webq程Q编写jspq行试?/span>

 index.jsp如下Q?br />  <%@ page language="java"%>
 <%@ taglib uri="/WEB-INF/tlds/tree.tld" prefix="tree"%>


 <html>
 <head>
  <title>Tree example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="StyleSheet" href="tree.css" type="text/css">
  <script type="text/javascript" src="tree.js"></script>
  <tree:init/>
 </head>

 <body>


 <b>Tree example :</b><br /><br />
 <tree:show/>
 <br /><br />

  </body>
 </html>

 试Qenjoy yourselfQ?/span>

 

4。待解决问题
 dTree有点bugQ如果把cssQimgQjs的\径改变,树就有可能不会正显C?nbsp;



D于渊 2008-10-23 21:35 发表评论
]]>
用ajax 仿百度谷歌搜索的下拉提示http://www.tkk7.com/jasonwbd/articles/231159.htmlD于渊D于渊Thu, 25 Sep 2008 09:44:00 GMThttp://www.tkk7.com/jasonwbd/articles/231159.htmlhttp://www.tkk7.com/jasonwbd/comments/231159.htmlhttp://www.tkk7.com/jasonwbd/articles/231159.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/231159.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/231159.html阅读全文

D于渊 2008-09-25 17:44 发表评论
]]>
用javascript 仿百度谷歌搜索的下拉提示http://www.tkk7.com/jasonwbd/articles/231158.htmlD于渊D于渊Thu, 25 Sep 2008 09:40:00 GMThttp://www.tkk7.com/jasonwbd/articles/231158.htmlhttp://www.tkk7.com/jasonwbd/comments/231158.htmlhttp://www.tkk7.com/jasonwbd/articles/231158.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/231158.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/231158.html阅读全文

D于渊 2008-09-25 17:40 发表评论
]]>
如何获取事g触发源(兼容IE和FireFox和gooogleQ~(例?http://www.tkk7.com/jasonwbd/articles/230888.htmlD于渊D于渊Wed, 24 Sep 2008 07:12:00 GMThttp://www.tkk7.com/jasonwbd/articles/230888.htmlhttp://www.tkk7.com/jasonwbd/comments/230888.htmlhttp://www.tkk7.com/jasonwbd/articles/230888.html#Feedback0http://www.tkk7.com/jasonwbd/comments/commentRss/230888.htmlhttp://www.tkk7.com/jasonwbd/services/trackbacks/230888.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript">
 window.onload=initAll ;
 function initAll(){
  document.getElementById("test01").onclick=test ;
 }
 function test(evt){
  
  var src = evt ? evt.target : window.event.srcElement ;
  alert(src) ;
  return false ;
 }
</script>

</head>
<body>
 <center>
  <a id="test01">test01</a>
 </center>
</body>
</html>



D于渊 2008-09-24 15:12 发表评论
]]>
վ֩ģ壺 ŮˬƵ| һ234վ| ޳˻ɫַ| ߹ۿƬAVվ| ޳aƬӰԺ| ޹˾þþƷ | ޾Ʒ͵| ƷһƵ| ޾Ʒ| ѻɫƵ| պһҳƷ| þù׾ƷѲ| ޳aƬ߹ۿ| ëƬȫѹۿ| | Ʒҳ߲| ɫ͵͵޹| һõþۺ| ѿվ߿| Ļۺ234| 㽶ѿһ| AVһ߿| Ƶ| Ůֻwwwվ| ˾Ʒձר| պһѸ| ާѡþþþƷ9966| av޹av | aƵƵ| 99þ޾ƷѶ| ޾ƷƷԲվ| ޾Ʒ޿һ| þþþƷƵ| ޹AV| һVR| 99Ƶ߹ۿ| ˿1ҳ| ҹavƵ| 99þ99ֻѷѾƷ| ޾Ʒ߲| Ļþ2017|