2010-04-29 12 views
0

jQuery Quelqu'un at-il travaillé LiveUpdate avec la fonction LiveUpdate (peut être un peu un abus de langage) se trouve sur this page? Ce n'est pas vraiment une fonction de recherche/mise à jour en direct, mais un mécanisme de filtrage rapide pour une liste préexistante, basé sur le modèle que vous entrez dans un champ de texte.Besoin d'aide pour la mise en œuvre de la routine

Pour faciliter la consultation, je suis coller toute la fonction ici:

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(); 
     }); 
    } 
    } 
}; 

Je cette liste, avec membres comme ID. Et un champ de texte avec dire, qs comme ID.

J'ai essayé lier la fonction de la manière suivante:

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

Mais quand je fais cela, la fonction est appelée qu'UNE SEULE FOIS lorsque la page est chargée (je mets dans certains console.logs dans la fonction) mais jamais après lorsque le texte est entré dans le champ de texte. J'ai aussi essayé d'appeler la routine de la keyup() fonction de qs.

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

Cela finit par entrer dans des boucles infinies (presque) et l'arrêt avec « Trop récursion » erreurs.

Alors quelqu'un peut-il s'il vous plaît faire la lumière sur la façon dont je suis censé mettre en œuvre effectivement cette fonction?

aussi pendant que vous y êtes, quelqu'un peut-il expliquer gentiment cette ligne me:

var score = this.score(term); 

Ce que je veux savoir est où cette méthode membre partition() vient? Je n'ai trouvé aucune méthode de ce type dans JS ou jQuery.

Merci pour toute l'aide, m^e

Répondre

1

partition() provient du Quicksilver library. Ce n'est pas très clair dans le post, mais John répond à la même question dans les commentaires.

+0

Merci. Il a négligé celui-là. –