在
ivony
的指導下,我對
的google suggest
技術進行了相關的研究。並且取得了一定的成果,基本成功實現了它的功能。下面對其中用
js建立其顯示效果的控制項過程來個總結。
在這裡我先介紹一下實現該控制項的過程。我將這個過程為為幾個步驟來實現。
首先觸發txt1後,首先對鍵盤事件進行判斷,判斷按下鍵的鍵值,若按下的鍵為上下鍵,則轉到執行上下鍵處理函式 catchkeyboard();否則轉到建立層和層的主體。我們首先來討論建立層和層主體的問題。要建立層,首先我們要知道它的絕對位置。
1. 獲取建立的層的絕對位置。
要獲取建立的層的位置,必須先獲取txt1的位置。在這裡,我們定義乙個函式來獲取txt1的位置:
function getposition( obj )
while ( obj = obj.offsetparent );
var arr = new array();
arr[0] = top;
arr[1] = left;
return arr;
通過該函式獲取txt1的位置為(top,left),則依附txt1建立的層的位置為(top+textbox.clientheight,left),,寬度和txt1相同。
2. 建立層。
知道了要建立的層的位置,我們要建立乙個層就很容易了。
function createmenu( textbox, menuid )
else
return document.getelementbyid( menuid );
3. 建立層的主體
接下來當然是建立層的主體。在這裡為了顯示它的效果,我們先定義一些陣列,從陣列中取資料。
定義陣列:
var arr1=new array("alizee","westlife","john","blue","colinton","angle");
var arr2=new array("信樂團","f4","twins","she","胡彥彬","周杰倫","劉若英","劉德華","angle","orange","green","white","red","blue");
定義乙個函式來取值:
function getsearchresult( key ) }
完成上面這些準備工作後,我們可以正式來建立層的主體了。
function createmenubody( key )
else
for ( var i = 0; i < j; i++ ) //迴圈建立層的主體
result += "" + arr[i] + "
" + (i+1) + "
";return result;
}4. 捕獲滑鼠事件。
客觀的講應該是獲取層主體的焦點,當主體獲取了這個焦點,那麼它的顏色變為高亮色。當滑鼠移到該主體的時候,它就獲取了這個焦點,使該主體變為高亮。換乙個角度來思考,變為高亮色這個事件也可以看做是由滑鼠觸發的。
因此用onmouseover事件來觸發,觸發函式forcemenuitem(index).
先定義乙個變數 var menufocusindex;它儲存的是上乙個高亮色的主體的值。觸發滑鼠事件時,我們將上乙個高亮色的主體變為白色,將現在觸發的主體變為蘭色,就解決了這個問題。**如下:
lastmenuitem = document.getelementbyid( "menuitem" + menufocusindex )
if ( lastmenuitem != null )
var menuitem = document.getelementbyid( "menuitem" + index );
if ( menuitem == null )
else
5.捕獲上下鍵事件
接下來我們解決捕獲上下鍵的問題。這裡面乙個容易混淆的地方就是,該事件的觸發是由txt1來觸發的,而不是由層的主體來觸發的。事實上圍繞這個問題我在實現過程中也走了不少彎路。
前面我有提到,在觸發txt1時即進行判斷,如果是上下鍵即轉到上下鍵處理函式catchkeyboard()。而不是到建立層。在該函式中,我們也可以呼叫滑鼠事件函式(確切的講是呼叫獲取焦點函式)。
var keynumber = event.keycode;
if(keynumber =='40') //向下
else }
else if(keynumber == '38')//向上
else }
6. 按上下鍵時給文字框賦對應的值。
注意到建立層的主體時定義的當前陣列的值。就很容易完成這個函式了。
function givnumber( index )
到這裡,該控制項的主體就基本上完成了,執行,在文字框分別輸入a和s,可以發現它和google suggest的效果是一樣的。當然,接下來還要利用ajax技術進行非同步**,輸入查詢值的時候由後台從資料庫返回查詢的數值,做成陣列的形式。當然這些簡單的步驟我在這裡就不多說了。至此,google suggest技術完全得到實現。
使用者控制項實現Google Suggest
google suggest就是輸入過程中到資料實時篩選結果。前幾天學了ajax與.net2.0高階程式設計,感覺稱不上高階兩字,都是很基礎的東西,特別是後面很多章節重複前面的知識,不過很容易上手,當ajax入門吧。練習時把學校 搜尋改進了google suggest,本來早就大致都實現,但遇上 心...
快速排序演算法實現(遞迴實現 棧實現)
基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...
介面實現與配置實現
在實現系統功能的時候,通常會首先定義好功能的介面,在系統功能不斷被實現的過程中,慢慢的發現有些介面的實現很類似,這個時候通常會開始做一次抽象,形 成乙個共同的部分,慢慢的系統形成了乙個抽象的層次,而為了通用,通常是通過定義介面,形成乙個抽象類,抽象類中暴露出一些抽象方法供外部擴充套件實 現,逐步的積...