2010-04-29 67 views
0

有沒有人使用LiveUpdate功能(可能有點用詞不當)this page?這不是真正的實時搜索/更新功能,而是基於您在文本字段中輸入的模式的預先存在列表的快速過濾機制。需要關於實現jQuery LiveUpdate例程的幫助

爲了便於參考,我在粘貼這裏的整個功能:

jQuery.fn.liveUpdate = function(list){ 
    list = jQuery(list); 

    if (list.length) { 
    var rows = list.children('li'), 
     cache = rows.map(function(){ 
     return this.innerHTML.toLowerCase(); 
     }); 

    this 
     .keyup(filter).keyup() 
     .parents('form').submit(function(){ 
     return false; 
     }); 
    } 

    return this; 

    function filter(){ 
    var term = jQuery.trim(jQuery(this).val().toLowerCase()), scores = []; 

    if (!term) { 
     rows.show(); 
    } else { 
     rows.hide(); 

     cache.each(function(i){ 
     var score = this.score(term); 
     if (score > 0) { scores.push([score, i]); } 
     }); 

     jQuery.each(scores.sort(function(a, b){return b[0] - a[0];}), function(){ 
     jQuery(rows[ this[1] ]).show(); 
     }); 
    } 
    } 
}; 

我有這個名單,成員,作爲標識。和一個文本字段說,qs作爲ID。

我試圖綁定功能以下列方式:

$('#qs').liveUpdate('#members'); 

但是當我這樣做,函數被調用只有一次加載頁面時(我把一些console.logs在功能),但從未在文本鍵入文本字段後。我也嘗試從keyup()函數qs調用例程。

$('#qs').keyup(function() { 
    $(this).liveUpdate('#members'); 
}); 

這最終進入無限循環(幾乎)與「太多遞歸」錯誤停止。

所以任何人都可以請闡明我應該如何實際執行此功能?

此外,而你在它,可有人好心解釋這一行對我說:

var score = this.score(term); 

我想知道的是這個成員方法得分()是從哪裏來的?我沒有發現任何內置JS或jQuery的方法。

感謝所有幫助, 平方公尺Ë

回答

1

得分()來自Quicksilver library。這在post中並不十分清楚,但約翰在評論中回答了同樣的問題。

+0

謝謝。忽略了那一個。 – 2011-03-04 04:17:11