小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DWR util.js工具包的使用 - TAINK - JavaEye技術(shù)網(wǎng)站

 西門獨孤 2011-01-30

DWR util.js工具包的使用

關(guān)鍵字: dwr util.js工具包的使用
目錄列表:

$()
DWRUtil.getText(id)
DWRUtil.getValue(id)
DWRUtil.setValue(id, value)
DWRUtil.getValues()
DWRUtil.setValues()
DWRUtil.addOptions and DWRUtil.removeAllOptions
DWRUtil.addRows and DWRUtil.removeAllRows
DWRUtil.onReturn
DWRUtil.toDescriptiveString
DWRUtil.useLoadingMessage
修補瀏覽器事件
util.js包含了一些工具函數(shù)來幫助你用javascript數(shù)據(jù)(例如從服務(wù)器返回的數(shù)據(jù))來更新你的web頁面。

你可以在DWR以外使用它,因為它不依賴于DWR的其他部分。

4個基本的操作頁面的函數(shù):getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table,list和image。getText()可以操作select list。

要修改table可以用addRows()和removeAllRows()。要修改列表(select列表和ul,ol列表)可以用addOptions()和removeAllOptions()。

還有一些其他功能不是DWRUtil的一部分。但它們也很有用,它們可以用來解決一些小問題,但是它們不是對于所有任都通用的。

1、$()
   $() 函數(shù)(它是合法的Javascript名字) 是從Protoype偷來的主意。大略上的講: $ = document.getElementById。 因為在Ajax程序中,你會需要寫很多這樣的語句,所以使用 $() 會更簡潔。
   通過指定的id來查找當(dāng)前HTML文檔中的元素,如果傳遞給它多個參數(shù),它會返回找到的元素的數(shù)組。所有非String類型的參數(shù)會被原封不動的返回。這個函數(shù)的靈感來至于prototype庫,但是它可以在更多的瀏覽器上運行。
   從技術(shù)角度來講他在IE5.0中是不能使用的,因為它使用了Array.push,盡管如此通常它只是用來同engine.js一起工作。如果你不想要engine.js并且在IE5.0中使用,那么你最好為Array.push找個替代品。

2、DWRUtil.getText(id)
   getText(id)和getValue(id)很相似。它是為select列表設(shè)計的。你可能需要取得顯示的文字,而不是當(dāng)前選項的值。
   例子:getahead.ltd.uk/dwr/browser/util/gettext

3、DWRUtil.getValue(id)
   DWRUtil.getValue(id)是 setValue()對應(yīng)的"讀版本"。它可以從HTML元素中取出其中的值,而你不用管這個元素是select列表還是一個div。
   這個函數(shù)能操作大多數(shù)HTML元素包括select(獲取當(dāng)前選項的值而不是文字)、input元素(包括textarea)、div和span。

4、DWRUtil.setValue(id, value)
   DWRUtil.setValue(id, value)根據(jù)第一個參數(shù)中指定的id找到相應(yīng)元素,并根據(jù)第二個參數(shù)改變其中的值。
   這個函數(shù)能操作大多數(shù)HTML元素包括select(設(shè)置當(dāng)前選項的值而不是文字)、input元素(包括textarea)、div和span。

5、DWRUtil.getValues()
   getValues()和getValue()非常相似,除了輸入的是包含name/value對的javascript對象。name是HTML元素的ID,value會被更改為這些ID對象元素的內(nèi)容。這個函數(shù)不會返回對象,它只更改傳遞給它的值。

【基于Form的getValues()】
   從DWR1.1開始getValues()可以傳入一個HTML元素(一個DOM對象或者id字符串),然后從它生成一個reply對象。例子:getahead.ltd.uk/dwr/browser/util/getvalues

6、DWRUtil.setValues()
   setValues()和setValue()非常相似,除了輸入的是包含name/value對的javascript對象。name是HTML元素的ID,value是你想要設(shè)置給相應(yīng)的元素的值。

7、DWRUtil.addOptions and DWRUtil.removeAllOptions
【生成列表】

   DWR的一個常遇到的任務(wù)就是根據(jù)選項填充選擇列表。下面的例子就是根據(jù)輸入填充列表。

   下面將介紹 DWRUtil.addOptions() 的幾種是用方法。

   如果你希望在你更新了select以后,它仍然保持運來的選擇,你要像下面這樣做:

   var sel = DWRUtil.getValue(id);
   DWRUtil.removeAllOptions(id);
   DWRUtil.addOptions(id, ...);
   DWRUtil.setValue(id, sel);如果你想加入一個初始的"Please select..." 選項那么你可以直接加入下面的語句:

   DWRUtil.addOptions(id, \["Please select ..."]);然后再下面緊接著加入你真正的選項數(shù)據(jù)。

【DWRUtil.addOptions有5種模式】
  
   簡單數(shù)組: DWRUtil.addOptions(selectid, array) 會創(chuàng)建一堆option,每個option的文字和值都是數(shù)組元素中的值。

   簡單對象數(shù)組 (指定text): DWRUtil.addOptions(selectid, data, prop) 用每個數(shù)組元素創(chuàng)造一個option,option的值和文字都是在prop中指定的對象的屬性。

   高級對象數(shù)組 (指定text和value值): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用每個數(shù)組元素創(chuàng)造一個option,option的值是對象的valueprop屬性,option的文字是對象的textprop屬性。

   對象: DWRUtil.addOptions(selectid, map, reverse)用每個屬性創(chuàng)建一個option。對象屬性名用來作為option的值,對象屬性值用來作為屬性的文字,這聽上去有些不對。但是事實上卻是正確的方式。如果reverse參數(shù)被設(shè)置為true,那么對象屬性值用來作為選項的值。

   對象的Map: DWRUtil.addOptions(selectid, map, valueprop, textprop) 用map中的每一個對象創(chuàng)建一個option。用對象的valueprop屬性做為option的value,用對象的textprop屬性做為 option的文字。

   ol 或 ul 列表: DWRUtil.addOptions(ulid, array) 用數(shù)組中的元素創(chuàng)建一堆li元素,他們的innerHTML是數(shù)組元素中的值。這種模式可以用來創(chuàng)建ul和ol列表。
  
   例子:getahead.ltd.uk/dwr/browser/lists

8、DWRUtil.addRows and DWRUtil.removeAllRows
【生成Table】

   DWR通過這兩個函數(shù)來幫你操作table: DWRUtil.addRows() 和 DWRUtil.removeAllRows() 。這個函數(shù)的第一個參數(shù)都是table、tbody、thead、tfoot的id。一般來說最好使用tbody,因為這樣可以保持你的header和 footer行不變,并且可以防止Internet Explorer的bug。

【DWRUtil.removeAllRows()】
   語法:
DWRUtil.removeAllRows(id);
   描述:
通過id刪除table中所有行。
   參數(shù):
id: table元素的id(最好是tbody元素的id)

【DWRUtil.addRows()】
   語法:
DWRUtil.addRows(id, array, cellfuncs, [options]);
   描述:
向指定id的table元素添加行。它使用數(shù)組中的每一個元素在table中創(chuàng)建一行。然后用cellfuncs數(shù)組中的沒有函數(shù)創(chuàng)建一個列。單元格是依次用cellfunc根據(jù)沒有數(shù)組中的元素創(chuàng)建出來的。

   DWR1.1開始,addRows()也可以用對象做為數(shù)據(jù)。如果你用一個對象代替一個數(shù)組來創(chuàng)建單元格,這個對象會被傳遞給cell函數(shù)。

   你可以寫一些像這樣的偽代碼:

for each member in array
    for each function in cellfuncs
         create cell from cellfunc(array[i])

   參數(shù):
id: table元素的id(最好是tbody元素的id)
array: 數(shù)組(DWR1.1以后可以是對象),做為更新表格數(shù)據(jù)。
cellfuncs: 函數(shù)數(shù)組,從傳遞過來的行數(shù)據(jù)中提取單元格數(shù)據(jù)。
options: 一個包含選項的對象(見下面)
   高級選項:
rowCreator: 一個用來創(chuàng)建行的函數(shù)(例如,你希望tr加個css). 默認是返回一個document.createElement("tr")
cellCreator: 一個用來創(chuàng)建單元格的函數(shù)(例如,用th代替td). 默認返回一個document.createElement("td")

rowData: the element value from the array (the same for all cells in a row)
rowIndex: the key (if map) or index (if array) from the collection
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)
data: The 'computed' data value for the cell (cellCreators only)
cellNum: The cell number that we are altering counting from 0 (cellCreators only

   例子:getahead.ltd.uk/dwr/browser/tables

【動態(tài)編輯表格(Dynamically Editing a Table)】

   例子:getahead.org/dwr/examples/table

9、DWRUtil.onReturn
   當(dāng)按下return鍵時,得到通知。

   當(dāng)表單中有input元素,觸發(fā)return鍵會導(dǎo)致表單被提交。當(dāng)使用Ajax時,這往往不是你想要的。而通常你需要的觸發(fā)一些Javscript。

   不幸的是不同的瀏覽器處理這個事件的方式不一樣。所以DWRUtil.onReturn修復(fù)了這個差異。如果你需要一個同表單元素中按回車相同的特性,你可以用這樣代碼實現(xiàn):

js 代碼
<input type="text" onkeypress="DWRUtil.onReturn(event, submitFunction)">   
<input type="button" onclick="submitFunction()">  

   你也可以使用onkeypress事件或者onkeydown事件,他們做同樣的事情。

   一般來說DWR不是一個Javascript類庫,所以它應(yīng)該試圖滿足這個需求。不管怎樣,這是在使用Ajax過程中一個很有用函數(shù)。

【onSubmit】
   這個函數(shù)的工作原理是onSubmit()事件只存在于form元素上。

   例子:getahead.ltd.uk/dwr/browser/util/onreturn

10、DWRUtil.toDescriptiveString
    DWRUtil.toDescriptiveString()函數(shù)比默認的toString()更好。第一個參數(shù)是要調(diào)試的對象,第二個參數(shù)是可選的,用來指定內(nèi)容深入的層次:

0: 單行調(diào)試
1: 多行調(diào)試,但不深入到子對象。
2: 多行調(diào)試,深入到第二層子對象
以此類推。一般調(diào)試到第二級是最佳的。
    還有第三個參數(shù),定義初始縮進。這個函數(shù)不應(yīng)該被用于調(diào)式程序之外,因為以后可能會有變化。

11、DWRUtil.useLoadingMessage
    設(shè)置一個Gmail風(fēng)格的加載信息。所有演示頁面
● dynamic text getahead.ltd.uk/dwr/examples/text
● selection lists getahead.ltd.uk/dwr/examples/lists
● live tables getahead.ltd.uk/dwr/examples/table
● live forms getahead.ltd.uk/dwr/examples/form
● dynamic validation getahead.ltd.uk/dwr/examples/validation
● address entry
    都使用了GMail風(fēng)格的加載消息。

    這個方法將來可能被廢棄,因為這個實現(xiàn)實在太專斷了。為什么是紅色,為什么在右上角,等等。唯一的真正答案就是:抄襲GMail。這里的建議是以本頁面中的代碼為模板,根據(jù)你的需求自定義。

    你必須在頁面加載以后調(diào)用這個方法(例如,不要在onload()事件觸發(fā)之前調(diào)用),因為它要創(chuàng)建一個隱藏的div來容納消息。

    最簡單的做法時在onload事件中調(diào)用DWRUtil.useLoadingMessage,像這樣:

js 代碼
function init() {   
    DWRUtil.useLoadingMessage();   
}  

    可能有些情況下你是不能容易的編輯header和body標(biāo)簽(如果你在使用CMS,這很正常),在這樣的情況下你可以這樣做:

js 代碼
function init() {   
DWRUtil.useLoadingMessage();   
}   
  
if (window.addEventListener) {   
window.addEventListener("load", init, false);   
}   
else if (window.attachEvent) {   
window.attachEvent("onload", init);   
}   
else {   
window.onload = init;   
}  

    下面這些是這個函數(shù)的代碼,它對于你要實現(xiàn)自己的加載消息很有用。這個函數(shù)的主要內(nèi)容是動態(tài)創(chuàng)建一個div(id是disabledZone)來容納消息。重要的代碼是當(dāng)遠程調(diào)用時使它顯示和隱藏:

js 代碼
DWREngine.setPreHook(function() {   
$('disabledZone').style.visibility = 'visible';   
});   
DWREngine.setPostHook(function() {   
$('disabledZone').style.visibility = 'hidden';   
});   
This is fairly simple and makes it quite easy to implement your own "loading" message.   
  
function useLoadingMessage(message) {   
var loadingMessage;   
if (message) loadingMessage = message;   
else loadingMessage = "Loading";   
  
DWREngine.setPreHook(function() {   
    var disabledZone = $('disabledZone');   
    if (!disabledZone) {   
      disabledZone = document.createElement('div');   
      disabledZone.setAttribute('id', 'disabledZone');   
      disabledZone.style.position = "absolute";   
      disabledZone.style.zIndex = "1000";   
      disabledZone.style.left = "0px";   
      disabledZone.style.top = "0px";   
      disabledZone.style.width = "100%";   
      disabledZone.style.height = "100%";   
      document.body.appendChild(disabledZone);   
      var messageZone = document.createElement('div');   
      messageZone.setAttribute('id', 'messageZone');   
      messageZone.style.position = "absolute";   
      messageZone.style.top = "0px";   
      messageZone.style.right = "0px";   
      messageZone.style.background = "red";   
      messageZone.style.color = "white";   
      messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";   
      messageZone.style.padding = "4px";   
      disabledZone.appendChild(messageZone);   
      var text = document.createTextNode(loadingMessage);   
      messageZone.appendChild(text);   
    }   
    else {   
      $('messageZone').innerHTML = loadingMessage;   
      disabledZone.style.visibility = 'visible';   
    }   
});   
  
DWREngine.setPostHook(function() {   
    $('disabledZone').style.visibility = 'hidden';   
});   
}  

    下面的做法能簡單的使用有加載消息圖片:

js 代碼
function useLoadingImage(imageSrc) {   
var loadingImage;   
if (imageSrc) loadingImage = imageSrc;   
else loadingImage = "ajax-loader.gif";   
DWREngine.setPreHook(function() {   
    var disabledImageZone = $('disabledImageZone');   
    if (!disabledImageZone) {   
      disabledImageZone = document.createElement('div');   
      disabledImageZone.setAttribute('id', 'disabledImageZone');   
      disabledImageZone.style.position = "absolute";   
      disabledImageZone.style.zIndex = "1000";   
      disabledImageZone.style.left = "0px";   
      disabledImageZone.style.top = "0px";   
      disabledImageZone.style.width = "100%";   
      disabledImageZone.style.height = "100%";   
      var imageZone = document.createElement('img');   
      imageZone.setAttribute('id','imageZone');   
      imageZone.setAttribute('src',imageSrc);   
      imageZone.style.position = "absolute";   
      imageZone.style.top = "0px";   
      imageZone.style.right = "0px";   
      disabledImageZone.appendChild(imageZone);   
      document.body.appendChild(disabledImageZone);   
    }   
    else {   
      $('imageZone').src = imageSrc;   
      disabledImageZone.style.visibility = 'visible';   
    }   
});   
DWREngine.setPostHook(function() {   
    $('disabledImageZone').style.visibility = 'hidden';   
});   
}  

    然后你就可以這樣使用:useLoadingImage("images/loader.gif");


12、修補瀏覽器事件
    如果你創(chuàng)建了一個DOM元素,然后用addAttribute在這個元素上創(chuàng)建了一個事件,那么他們不能被正常的觸發(fā)。你可以使用下面的腳本來遍歷一個DOM樹,并重新為他們綁定事件,這樣他們就能正常的觸發(fā)了。

    把'click'改成你希望的事件。

js 代碼
DWREngine._fixExplorerEvents = function(obj) {      
for (var i = 0; i < obj.childNodes.length; i++) {   
    var childObj = obj.childNodes [i];   
    if (childObj.nodeValue == null) {   
      var onclickHandler = childObj.getAttribute('onclick');   
      if (onclickHandler != null) {   
        childObj.removeAttribute('onclick');   
        // If using prototype:   
        //   Event.observe(childObj, 'click', new Function(onclickHandler));   
        // Otherwise (but watch out for memory leaks):   
        if (element.attachEvent) {   
          element.attachEvent("onclick", onclickHandler);   
        }   
        else {   
          element.addEventListener("click", onclickHandler, useCapture);   
        }   
      }   
      DWREngine._fixExplorerEvents(childObj);   
    }   
}
}

13.

DWRUtil.selectRange("sel-test", , )

現(xiàn)有輸入框 <input type=text id="sel-test" value="0123456789">, 則點擊按鈕時4567被選中: 0123456789

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多