這次介紹幾個(gè)相類(lèi)的函數:$()、$F()、$A、$H、$R。
$() 相當于document.getElementById() ,其中間的參數可以是一個(gè)ID或多個(gè)ID。
示例:
<HTML><HEAD><TITLE> Test Page </TITLE><script src="<script>function test1(){var d = $(‘myDiv‘);alert(d.innerHTML);}function test2(){var divs = $(‘myDiv‘,‘myOtherDiv‘);for(i=0; i<divs.length; i++){alert(divs[i].innerHTML);}}</script></HEAD><BODY><div id="myDiv"><p>呂的部落格歡迎您,我是內容一ID為myDiv</p></div><div id="myOtherDiv"><p>呂的部落格歡迎您,我是內容二ID為myOtherDiv</p></div><input type="button" value="取得myDiv的HTML代碼" onclick="test1();"><br><input type="button" value="取得myDiv與myOtherDiv的HTML代碼" onclick="test2();"><br></BODY></HTML> <!-- Inject Script Filtered -->哈哈哈,我是內容一ID為myDiv
呵呵呵我是內容二標題為myOtherDiv
知道怎么用了吧就是使用$(‘控件ID‘)取得該ID對應的對象。不懂?無(wú)話(huà)說(shuō)了去看看Javascript比較基本的東西吧
好了下面說(shuō)說(shuō)$F()這個(gè)函數,它實(shí)際是是$()的特別版本而已,$()返回具有ID的對象,而$F()只是返回具有ID的對象的值(注意首先這個(gè)對像要有value這個(gè)屬性,返回的也只是一個(gè)值而不是對像)該函數主要應用于取得輸入框內的值。
示例:
<script>
function test3()
{
alert( $F(‘userName‘) );
}
</script>
<input type="text" id="userName" value="www.Lvjiyong.Com">
<input type="button" value="取得userName的值" onclick="test3();">
<!-- Inject Script Filtered -->userName:
$A()的用法就更有特殊性,主要應用于具有NodeLists 屬性的對象.使用$A(‘對象ID‘)返回的是一組Array對象,哈哈哈,這回又是對象了,還是看一下實(shí)際應用的例子吧:
<script>
function showOptions(){
var someNodeList = $(‘lstEmployees‘).getElementsByTagName(‘option‘);
var nodes = $A(someNodeList);
nodes.each(function(node){
alert(node.nodeName + ‘: ‘ + node.innerHTML);
});
}
</script>
<select id="lstEmployees" size="3" >
<option value="1">Lvjiyong.com</option>
<option value="2">www.Lvjiyong.Com</option>
<option value="3">呂的部落格</option>
</select>
<input type="button" value="顯示options" onclick="showOptions();" >
<!-- Inject Script Filtered -->
$H()是一個(gè)對象轉化為Hash對象,我還沒(méi)實(shí)際用過(guò),看樣子主要可能還是用于將對象轉為參數方便傳送(.NET序列化簡(jiǎn)單明了版?),我們看看示例吧:
<script>
function testHash()
{
//let‘s create the object創(chuàng )建對象
var a = {
first: 10,
second: 20,
third: 30
};
//now transform it into a hash轉為Hash
var h = $H(a);
alert(h.toQueryString()); //轉為字符串,哈哈哈可以使用Ajax方式把這個(gè)對象的屬性傳到后臺了displays: first=10&second=20&third=30
}
</script>
下面說(shuō)一下今天最后要說(shuō)的最后一個(gè)函數:$R()
The $R() function is simply a short hand to writing new ObjectRange(lowerBound, upperBound, excludeBounds). 哈這絕對是個(gè)很有意思的函數:指定上下限即交回你有序的Range
示例:
<script>
function demoDollar_R(){
var range = $R(10, 20, false);
range.each(function(value, index){
alert(value);
});
}
</script>
<input type="button" value="$R的例子" onclick="demoDollar_R();" >
昨天應該把Try.these() 這個(gè)函數也一塊說(shuō)了,因為今天講得是關(guān)于封裝的Ajax的類(lèi)庫了。
Try.these() 的作用和C#里的try{}catch{try{}catch{.....}}作用一樣,就是按順序執行一串的函數,直到這些函數的其中某個(gè)正常工作,這個(gè)看起來(lái)沒(méi)用的(因為javascrpt本身就有try{}catch(e){}但是實(shí)際上這個(gè)東西用在某些時(shí)候卻讓你感到很輕常很自然,比如些有語(yǔ)句Firefox與IE不兼容,這種情況下可以分別寫(xiě)兩個(gè)專(zhuān)門(mén)對Firefox與IE的函數,然后使用
<script>
function testTry{
return Try.these(
function() {專(zhuān)門(mén)針對IE},
function() {專(zhuān)門(mén)針對Firefox}
);//呂的部落格:http://www.lvjiyong.com
}
</script>
在prototype.js中我以后會(huì )用到的有兩個(gè)Ajax類(lèi),一個(gè)是Ajax.Request 別一個(gè)是Ajax.Updater。AjaxRequest繼承自Ajax.Base。而Ajax.Updater繼承自Ajax.Request ,說(shuō)這些沒(méi)有別的意思,主要是想讓讀者明白,隨著(zhù)繼承的延續,類(lèi)的功能也將特殊化。
我是個(gè)粗人不過(guò)講那么多道理,就舉個(gè)例子開(kāi)始吧。哦,差點(diǎn)忘了說(shuō)一件事,Ajax在普通瀏覽器如XP下是默認不能跨域請求,而在2003下不加入可信站點(diǎn)是不可使用的。所以有些應用不能一味地使用Ajax實(shí)現,不然呵呵,記得給自己留后路,像Gmail,它默認使用Ajax實(shí)現,但如果系統不能執行Ajax的話(huà)就提示用戶(hù)可以使用普通HTML實(shí)現。還有所謂跨域就是如我的域名是www.LvJiyong.com 我可以使用Ajax請求www.LvJiyong.com 的所有允許訪(fǎng)問(wèn)的資源,而假如我想訪(fǎng)問(wèn)www.1818city.com 域名下的資源瀏覽器將會(huì )拒絕,有些人想用Ajax實(shí)現文件上傳,可行性就更夸張,必須把安全級別降到最低才行。另:在本地測試時(shí)是允許訪(fǎng)問(wèn)任何域下的資源的,不要企圖在網(wǎng)站上直接使用Ajax取得其它網(wǎng)站下的資料,在A(yíng)SP里我們可以使用服務(wù)端的XMLHTTP實(shí)現,而在.NET下允許的方法更多,在此不說(shuō)了,又開(kāi)始廢話(huà)。
好,現在開(kāi)始舉例,先講一下特殊中的特殊Ajax.Updater。不知道讀者有沒(méi)有嘗試注冊本BLOG的會(huì )員,驗證碼就是使用Ajax.Updater去實(shí)現的,在頁(yè)面載入的時(shí)候注冊一個(gè)事件來(lái)監視驗證碼輸入框的變化,當輸入的長(cháng)符符合驗證碼長(cháng)度時(shí),自動(dòng)觸發(fā)向Ajax.Updater驗證驗證碼的頁(yè)面發(fā)出請求,系統如果檢測驗證碼錯誤,則返回“驗證碼錯誤”,否則返回空值,表示正確。而Ajax.Updater的應用靈巧的就是在這種情況下的使用(只需要顯示返回值的情況)。
<script>
function getHTML()
{
var url = ‘http://www.lvjiyong.com/1818city/Default.aspx‘;
var pars = ‘test=lvjiyong.com‘;
var myAjax = new Ajax.Updater(
‘placeholder‘,
url,
{
method: ‘get‘,
parameters: pars
});
/*
使用GET方法主要是傳遞少數的參數,記住只適合傳送少量的參數傳下參數,在‘http://www.lvjiyong.com/1818city/Default.aspx‘是沒(méi)有對參數進(jìn)行處理的,只是顯示如何傳遞參數
傳遞參數分為Post與GET大家應該都是知道的,當Post時(shí)就用Request.Form["參數名"]取值,Get時(shí)用Request.QueryString["參數值"]取值。處理回數據后響應請求,響應的文本內容將會(huì )自動(dòng)填充到ID為placeholder的容器中。
使用Post提交格式如:(主要注意是傳遞Post數據,當然也可以在Post時(shí)在url中寫(xiě)上參數傳遞querystring值。)
var postData = "內容";
var myAjax = new Ajax.Updater(
‘placeholder‘,
url,
{
method: ‘post‘,
postBody:postData});
*/
}
</script>
<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>
默認情況下使用這種方法請求即可,但要再細微點(diǎn)可以多設置參數,這個(gè)將在以后使用Ajax.Request時(shí)深入說(shuō)一下。
開(kāi)始胡敲了,先停住吧,最近精神狀態(tài)一直不好.明天講一下參數,并說(shuō)下怎么實(shí)現當Ajax請求發(fā)生時(shí)出現"Loading...",而成功后自動(dòng)消失.
聯(lián)系客服