﻿<?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-liuqiang5151-文章分类-Ajax</title><link>http://www.blogjava.net/liuqiang5151/category/25665.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 11 Apr 2008 22:33:38 GMT</lastBuildDate><pubDate>Fri, 11 Apr 2008 22:33:38 GMT</pubDate><ttl>60</ttl><item><title>转：DWR util.js工具包的使用</title><link>http://www.blogjava.net/liuqiang5151/articles/192251.html</link><dc:creator>刘强</dc:creator><author>刘强</author><pubDate>Fri, 11 Apr 2008 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/liuqiang5151/articles/192251.html</guid><wfw:comment>http://www.blogjava.net/liuqiang5151/comments/192251.html</wfw:comment><comments>http://www.blogjava.net/liuqiang5151/articles/192251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuqiang5151/comments/commentRss/192251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuqiang5151/services/trackbacks/192251.html</trackback:ping><description><![CDATA[<p style="font-size: 10pt"><span style="font-size: 10pt">DWRUtil这个工具还是很方便的，在网上看到一篇文件介绍的挺全，今天整理一下贴出来。</span></p>
<p><span style="font-size: 10pt">$() <br />
DWRUtil.getText(id) <br />
DWRUtil.getValue(id) <br />
DWRUtil.setValue(id, value) <br />
DWRUtil.getValues() <br />
DWRUtil.setValues() <br />
DWRUtil.addOptions and DWRUtil.removeAllOptions <br />
DWRUtil.addRows and DWRUtil.removeAllRows <br />
DWRUtil.onReturn <br />
DWRUtil.toDescriptiveString <br />
DWRUtil.useLoadingMessage <br />
修补浏览器事件 <br />
util.js包含了一些工具函数来帮助你用javascript数据(例如从服务器返回的数据)来更新你的web页面。 </span></p>
<p><span style="font-size: 10pt">你可以在DWR以外使用它，因为它不依赖于DWR的其他部分。 </span></p>
<p><span style="font-size: 10pt">4个基本的操作页面的函数：getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table，list和image。getText()可以操作select list。 </span></p>
<p><span style="font-size: 10pt">要修改table可以用addRows()和removeAllRows()。要修改列表(select列表和ul,ol列表)可以用addOptions()和removeAllOptions()。 </span></p>
<p><span style="font-size: 10pt">还有一些其他功能不是DWRUtil的一部分。但它们也很有用，它们可以用来解决一些小问题，但是它们不是对于所有任都通用的。</span></p>
<p><span style="font-size: 10pt">1、$()<br />
&nbsp;&nbsp; $() 函数(它是合法的Javascript名字) 是从Protoype偷来的主意。大略上的讲： $ = document.getElementById。 因为在Ajax程序中，你会需要写很多这样的语句，所以使用 $() 会更简洁。<br />
&nbsp;&nbsp; 通过指定的id来查找当前HTML文档中的元素，如果传递给它多个参数，它会返回找到的元素的数组。所有非String类型的参数会被原封不动的返回。这个函数的灵感来至于prototype库，但是它可以在更多的浏览器上运行。<br />
&nbsp;&nbsp; 从技术角度来讲他在IE5.0中是不能使用的，因为它使用了Array.push，尽管如此通常它只是用来同engine.js一起工作。如果你不想要engine.js并且在IE5.0中使用，那么你最好为Array.push找个替代品。</span></p>
<p><span style="font-size: 10pt">2、DWRUtil.getText(id)<br />
&nbsp;&nbsp; getText(id)和getValue(id)很相似。它是为select列表设计的。你可能需要取得显示的文字，而不是当前选项的值。<br />
&nbsp;&nbsp; 例子：getahead.ltd.uk/dwr/browser/util/gettext</span></p>
<p><span style="font-size: 10pt">3、DWRUtil.getValue(id)<br />
&nbsp;&nbsp; DWRUtil.getValue(id)是 setValue()对应的"读版本"。它可以从HTML元素中取出其中的值，而你不用管这个元素是select列表还是一个div。<br />
&nbsp;&nbsp; 这个函数能操作大多数HTML元素包括select(获取当前选项的值而不是文字)、input元素(包括textarea)、div和span。</span></p>
<p><span style="font-size: 10pt">4、DWRUtil.setValue(id, value)<br />
&nbsp;&nbsp; DWRUtil.setValue(id, value)根据第一个参数中指定的id找到相应元素，并根据第二个参数改变其中的值。<br />
&nbsp;&nbsp; 这个函数能操作大多数HTML元素包括select(设置当前选项的值而不是文字)、input元素(包括textarea)、div和span。</span></p>
<p><span style="font-size: 10pt">5、DWRUtil.getValues()<br />
&nbsp;&nbsp; getValues()和getValue()非常相似，除了输入的是包含name/value对的javascript对象。name是HTML元素的ID，value会被更改为这些ID对象元素的内容。这个函数不会返回对象，它只更改传递给它的值。</span></p>
<p><span style="font-size: 10pt">&nbsp; 【基于Form的getValues()】<br />
&nbsp;&nbsp; 从DWR1.1开始getValues()可以传入一个HTML元素(一个DOM对象或者id字符串)，然后从它生成一个reply对象。例子：getahead.ltd.uk/dwr/browser/util/getvalues</span></p>
<p><span style="font-size: 10pt">6、DWRUtil.setValues()<br />
&nbsp;&nbsp; setValues()和setValue()非常相似，除了输入的是包含name/value对的javascript对象。name是HTML元素的ID，value是你想要设置给相应的元素的值。</span></p>
<p><span style="font-size: 10pt">7、DWRUtil.addOptions and DWRUtil.removeAllOptions<br />
&nbsp; 【生成列表】</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; DWR的一个常遇到的任务就是根据选项填充选择列表。下面的例子就是根据输入填充列表。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 下面将介绍 DWRUtil.addOptions() 的几种是用方法。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 如果你希望在你更新了select以后，它仍然保持运来的选择，你要像下面这样做：</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; var sel = DWRUtil.getValue(id);<br />
&nbsp;&nbsp; DWRUtil.removeAllOptions(id);<br />
&nbsp;&nbsp; DWRUtil.addOptions(id, ...);<br />
&nbsp;&nbsp; DWRUtil.setValue(id, sel);如果你想加入一个初始的"Please select..." 选项那么你可以直接加入下面的语句：</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; DWRUtil.addOptions(id, \["Please select ..."]);然后再下面紧接着加入你真正的选项数据。</span></p>
<p><span style="font-size: 10pt">&nbsp; 【DWRUtil.addOptions有5种模式】<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; 简单数组: DWRUtil.addOptions(selectid, array) 会创建一堆option，每个option的文字和值都是数组元素中的值。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 简单对象数组 (指定text): DWRUtil.addOptions(selectid, data, prop) 用每个数组元素创造一个option，option的值和文字都是在prop中指定的对象的属性。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 高级对象数组 (指定text和value值): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用每个数组元素创造一个option，option的值是对象的valueprop属性，option的文字是对象的textprop属性。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 对象: DWRUtil.addOptions(selectid, map, reverse)用每个属性创建一个option。对象属性名用来作为option的值，对象属性值用来作为属性的文字，这听上去有些不对。但是事实上却是正确的方式。如果reverse参数被设置为true，那么对象属性值用来作为选项的值。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 对象的Map: DWRUtil.addOptions(selectid, map, valueprop, textprop) 用map中的每一个对象创建一个option。用对象的valueprop属性做为option的value，用对象的textprop属性做为option的文字。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; ol 或 ul 列表: DWRUtil.addOptions(ulid, array) 用数组中的元素创建一堆li元素，他们的innerHTML是数组元素中的值。这种模式可以用来创建ul和ol列表。<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; 例子：getahead.ltd.uk/dwr/browser/lists</span></p>
<p><span style="font-size: 10pt">8、DWRUtil.addRows and DWRUtil.removeAllRows<br />
&nbsp; 【生成Table】</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; DWR通过这两个函数来帮你操作table： DWRUtil.addRows() 和 DWRUtil.removeAllRows() 。这个函数的第一个参数都是table、tbody、thead、tfoot的id。一般来说最好使用tbody，因为这样可以保持你的header和footer行不变，并且可以防止Internet Explorer的bug。</span></p>
<p><span style="font-size: 10pt">&nbsp; 【DWRUtil.removeAllRows()】<br />
&nbsp;&nbsp; 语法:<br />
&nbsp;DWRUtil.removeAllRows(id);<br />
&nbsp;&nbsp; 描述:<br />
&nbsp;通过id删除table中所有行。<br />
&nbsp;&nbsp; 参数:<br />
&nbsp;id: table元素的id(最好是tbody元素的id)</span></p>
<p><span style="font-size: 10pt">&nbsp; 【DWRUtil.addRows()】<br />
&nbsp;&nbsp; 语法:<br />
&nbsp;DWRUtil.addRows(id, array, cellfuncs, [options]);<br />
&nbsp;&nbsp; 描述:<br />
&nbsp;向指定id的table元素添加行。它使用数组中的每一个元素在table中创建一行。然后用cellfuncs数组中的没有函数创建一个列。单元格是依次用cellfunc根据没有数组中的元素创建出来的。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; DWR1.1开始，addRows()也可以用对象做为数据。如果你用一个对象代替一个数组来创建单元格，这个对象会被传递给cell函数。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 你可以写一些像这样的伪代码：</span></p>
<p><span style="font-size: 10pt">&nbsp;for each member in array<br />
&nbsp;&nbsp;&nbsp; for each function in cellfuncs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create cell from cellfunc(array[i])</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 参数:<br />
&nbsp;id: table元素的id(最好是tbody元素的id) <br />
&nbsp;array: 数组(DWR1.1以后可以是对象)，做为更新表格数据。 <br />
&nbsp;cellfuncs: 函数数组，从传递过来的行数据中提取单元格数据。 <br />
&nbsp;options: 一个包含选项的对象(见下面) <br />
&nbsp;&nbsp; 高级选项:<br />
&nbsp;rowCreator: 一个用来创建行的函数(例如，你希望tr加个css). 默认是返回一个document.createElement("tr") <br />
&nbsp;cellCreator: 一个用来创建单元格的函数(例如，用th代替td). 默认返回一个document.createElement("td") </span></p>
<p><span style="font-size: 10pt">&nbsp;rowData: the element value from the array (the same for all cells in a row) <br />
&nbsp;rowIndex: the key (if map) or index (if array) from the collection <br />
&nbsp;rowNum: The row number counting from 0 in this section (so if you are using tbody, it counts rows in the tbody and not the whole table) <br />
&nbsp;data: The 'computed' data value for the cell (cellCreators only) <br />
&nbsp;cellNum: The cell number that we are altering counting from 0 (cellCreators only</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 例子：getahead.ltd.uk/dwr/browser/tables</span></p>
<p><span style="font-size: 10pt">&nbsp; 【动态编辑表格(Dynamically Editing a Table)】</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 例子：getahead.org/dwr/examples/table</span></p>
<p><span style="font-size: 10pt">9、DWRUtil.onReturn<br />
&nbsp;&nbsp; 当按下return键时，得到通知。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 当表单中有input元素，触发return键会导致表单被提交。当使用Ajax时，这往往不是你想要的。而通常你需要的触发一些Javscript。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 不幸的是不同的浏览器处理这个事件的方式不一样。所以DWRUtil.onReturn修复了这个差异。如果你需要一个同表单元素中按回车相同的特性，你可以用这样代码实现：</span></p>
<p><span style="font-size: 10pt">js 代码<br />
&amp;lt;input type="text" onkeypress="DWRUtil.onReturn(event, submitFunction)"&gt;&nbsp;&nbsp;&nbsp; <br />
&amp;lt;input type="button" onclick="submitFunction()"&gt;&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 你也可以使用onkeypress事件或者onkeydown事件，他们做同样的事情。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 一般来说DWR不是一个Javascript类库，所以它应该试图满足这个需求。不管怎样，这是在使用Ajax过程中一个很有用函数。</span></p>
<p><span style="font-size: 10pt">&nbsp; 【onSubmit】<br />
&nbsp;&nbsp; 这个函数的工作原理是onSubmit()事件只存在于form元素上。 </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 例子：getahead.ltd.uk/dwr/browser/util/onreturn</span></p>
<p><span style="font-size: 10pt">10、DWRUtil.toDescriptiveString<br />
&nbsp;&nbsp;&nbsp; DWRUtil.toDescriptiveString()函数比默认的toString()更好。第一个参数是要调试的对象，第二个参数是可选的，用来指定内容深入的层次：</span></p>
<p><span style="font-size: 10pt">&nbsp;0: 单行调试 <br />
&nbsp;1: 多行调试，但不深入到子对象。 <br />
&nbsp;2: 多行调试，深入到第二层子对象<br />
&nbsp;以此类推。一般调试到第二级是最佳的。 <br />
&nbsp;&nbsp;&nbsp; 还有第三个参数，定义初始缩进。这个函数不应该被用于调式程序之外，因为以后可能会有变化。</span></p>
<p><span style="font-size: 10pt">11、DWRUtil.useLoadingMessage<br />
&nbsp;&nbsp;&nbsp; 设置一个Gmail风格的加载信息。所有演示页面<br />
&nbsp;● dynamic text&nbsp; getahead.ltd.uk/dwr/examples/text<br />
&nbsp;● selection lists&nbsp; getahead.ltd.uk/dwr/examples/lists<br />
&nbsp;● live tables&nbsp; getahead.ltd.uk/dwr/examples/table<br />
&nbsp;● live forms&nbsp; getahead.ltd.uk/dwr/examples/form<br />
&nbsp;● dynamic validation getahead.ltd.uk/dwr/examples/validation<br />
&nbsp;● address entry&nbsp; <br />
&nbsp;&nbsp;&nbsp; 都使用了GMail风格的加载消息。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 这个方法将来可能被废弃，因为这个实现实在太专断了。为什么是红色，为什么在右上角，等等。唯一的真正答案就是：抄袭GMail。这里的建议是以本页面中的代码为模板，根据你的需求自定义。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 你必须在页面加载以后调用这个方法(例如，不要在onload()事件触发之前调用)，因为它要创建一个隐藏的div来容纳消息。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 最简单的做法时在onload事件中调用DWRUtil.useLoadingMessage，像这样：</span></p>
<p><span style="font-size: 10pt">js 代码<br />
function init() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; DWRUtil.useLoadingMessage();&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 可能有些情况下你是不能容易的编辑header和body标签(如果你在使用CMS，这很正常)，在这样的情况下你可以这样做：</span></p>
<p><span style="font-size: 10pt">js 代码<br />
function init() {&nbsp;&nbsp;&nbsp; <br />
&nbsp; DWRUtil.useLoadingMessage();&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
if (window.addEventListener) {&nbsp;&nbsp;&nbsp; <br />
&nbsp; window.addEventListener("load", init, false);&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp;&nbsp; <br />
else if (window.attachEvent) {&nbsp;&nbsp;&nbsp; <br />
&nbsp; window.attachEvent("onload", init);&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp;&nbsp; <br />
else {&nbsp;&nbsp;&nbsp; <br />
&nbsp; window.onload = init;&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 下面这些是这个函数的代码，它对于你要实现自己的加载消息很有用。这个函数的主要内容是动态创建一个div(id是disabledZone)来容纳消息。重要的代码是当远程调用时使它显示和隐藏：</span></p>
<p><span style="font-size: 10pt">js 代码<br />
DWREngine.setPreHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp; $('disabledZone').style.visibility = 'visible';&nbsp;&nbsp;&nbsp; <br />
});&nbsp;&nbsp;&nbsp; <br />
DWREngine.setPostHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp; $('disabledZone').style.visibility = 'hidden';&nbsp;&nbsp;&nbsp; <br />
});&nbsp;&nbsp;&nbsp; <br />
This is fairly simple and makes it quite easy to implement your own "loading" message.&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
function useLoadingMessage(message) {&nbsp;&nbsp;&nbsp; <br />
&nbsp; var loadingMessage;&nbsp;&nbsp;&nbsp; <br />
&nbsp; if (message) loadingMessage = message;&nbsp;&nbsp;&nbsp; <br />
&nbsp; else loadingMessage = "Loading";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; DWREngine.setPreHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var disabledZone = $('disabledZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if (!disabledZone) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone = document.createElement('div');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.setAttribute('id', 'disabledZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.position = "absolute";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.zIndex = "1000";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.left = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.top = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.width = "100%";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.height = "100%";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(disabledZone);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var messageZone = document.createElement('div');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.setAttribute('id', 'messageZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.position = "absolute";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.top = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.right = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.background = "red";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.color = "white";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.style.padding = "4px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.appendChild(messageZone);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var text = document.createTextNode(loadingMessage);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messageZone.appendChild(text);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; else {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('messageZone').innerHTML = loadingMessage;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledZone.style.visibility = 'visible';&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp; });&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; DWREngine.setPostHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $('disabledZone').style.visibility = 'hidden';&nbsp;&nbsp;&nbsp; <br />
&nbsp; });&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 下面的做法能简单的使用有加载消息图片：</span></p>
<p><span style="font-size: 10pt">js 代码<br />
function useLoadingImage(imageSrc) {&nbsp;&nbsp;&nbsp; <br />
&nbsp; var loadingImage;&nbsp;&nbsp;&nbsp; <br />
&nbsp; if (imageSrc) loadingImage = imageSrc;&nbsp;&nbsp;&nbsp; <br />
&nbsp; else loadingImage = "ajax-loader.gif";&nbsp;&nbsp;&nbsp; <br />
&nbsp; DWREngine.setPreHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var disabledImageZone = $('disabledImageZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if (!disabledImageZone) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone = document.createElement('div');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.setAttribute('id', 'disabledImageZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.position = "absolute";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.zIndex = "1000";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.left = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.top = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.width = "100%";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.height = "100%";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var imageZone = document.createElement('img');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageZone.setAttribute('id','imageZone');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageZone.setAttribute('src',imageSrc);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageZone.style.position = "absolute";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageZone.style.top = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageZone.style.right = "0px";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.appendChild(imageZone);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(disabledImageZone);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; else {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('imageZone').src = imageSrc;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disabledImageZone.style.visibility = 'visible';&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp; });&nbsp;&nbsp;&nbsp; <br />
&nbsp; DWREngine.setPostHook(function() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $('disabledImageZone').style.visibility = 'hidden';&nbsp;&nbsp;&nbsp; <br />
&nbsp; });&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 然后你就可以这样使用:useLoadingImage("images/loader.gif");</span></p>
<p><br />
<span style="font-size: 10pt">12、修补浏览器事件<br />
&nbsp;&nbsp;&nbsp; 如果你创建了一个DOM元素，然后用addAttribute在这个元素上创建了一个事件，那么他们不能被正常的触发。你可以使用下面的脚本来遍历一个DOM树，并重新为他们绑定事件，这样他们就能正常的触发了。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 把'click'改成你希望的事件。</span></p>
<p><span style="font-size: 12pt">js 代码<br />
DWREngine._fixExplorerEvents = function(obj) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; for (var i = 0; i &lt; obj.childNodes.length; i++) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var childObj = obj.childNodes [i];&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if (childObj.nodeValue == null) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var onclickHandler = childObj.getAttribute('onclick');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (onclickHandler != null) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; childObj.removeAttribute('onclick');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If using prototype:&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; Event.observe(childObj, 'click', new Function(onclickHandler));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Otherwise (but watch out for memory leaks):&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (element.attachEvent) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element.attachEvent("onclick", onclickHandler);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element.addEventListener("click", onclickHandler, useCapture);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWREngine._fixExplorerEvents(childObj);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp; } <br />
} <br />
</span></p>
<img src ="http://www.blogjava.net/liuqiang5151/aggbug/192251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuqiang5151/" target="_blank">刘强</a> 2008-04-11 18:12 <a href="http://www.blogjava.net/liuqiang5151/articles/192251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dwr变量未定义错误</title><link>http://www.blogjava.net/liuqiang5151/articles/143514.html</link><dc:creator>刘强</dc:creator><author>刘强</author><pubDate>Fri, 07 Sep 2007 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/liuqiang5151/articles/143514.html</guid><wfw:comment>http://www.blogjava.net/liuqiang5151/comments/143514.html</wfw:comment><comments>http://www.blogjava.net/liuqiang5151/articles/143514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuqiang5151/comments/commentRss/143514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuqiang5151/services/trackbacks/143514.html</trackback:ping><description><![CDATA[用dwr做个小例子，提示我页面变量未定义错误。
<p>login.jsp</p>
<p>&lt;script type='text/javascript' src='&lt;%=request.getContextPath()%&gt;/dwr/interface/LoginDwr.js'&gt;&lt;/script&gt;&nbsp;<br />
&lt;script type='text/javascript' src='&lt;%=request.getContextPath()%&gt;/dwr/engine.js'&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function doLogin(){<br />
&nbsp;&nbsp;&nbsp; var userName = document.getElementById("username");<br />
&nbsp;&nbsp;&nbsp; LoginDwr.login(userName,handleLogin);<br />
}<br />
function handleLogin(date){<br />
&nbsp;&nbsp;&nbsp; alert(date);<br />
}<br />
&lt;/script&gt;</p>
<p>LoginDwr</p>
<p>public String login(String userName){<br />
&nbsp;&nbsp;&nbsp; return "Hello"+userName;<br />
}</p>
<p>dwr.xml</p>
<p>&lt;create creator="new" javascript="LoginDwr"&gt;<br />
<span>&lt;param name="class" value="helloworld.LoginDwr"/&gt;<br />
</span><span>&lt;/create&gt; </span></p>
<p><span>仔细检查了几遍，没发现什么错误，问了挺多人，也没解决。后来到网上搜，有人说下个xalan-j_2_7_0-bin.zip<br />
解压把里面的jar拷到tomcat\common\endorsed目录下，果然奏效。具体这个东西有什么用，我也不清楚。</span></p>
<img src ="http://www.blogjava.net/liuqiang5151/aggbug/143514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuqiang5151/" target="_blank">刘强</a> 2007-09-07 19:46 <a href="http://www.blogjava.net/liuqiang5151/articles/143514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>