Нужна помощь в реализации подпрограммы jQuery LiveUpdate - PullRequest
0 голосов
/ 29 апреля 2010

Кто-нибудь работал с функцией 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();
      });
    }
  }
};

У меня есть этот список с members в качестве идентификатора. И текстовое поле с, скажем, qs в качестве идентификатора.

Я попытался связать функцию следующим образом:

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

Но когда я это делаю, функция вызывается только ОДИН РАЗ , когда страница загружена (я добавил в функцию несколько console.logs), но никогда после этого, когда текст вводится в текстовое поле. Я также попытался вызвать подпрограмму из функции keyup () qs .

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

В конечном итоге это приводит к бесконечным циклам (почти) и остановке с "Слишком много рекурсии" ошибок.

Так может ли кто-нибудь пролить свет на то, как я должен на самом деле реализовать эту функцию?

Также, пока вы занимаетесь этим, кто-то может объяснить мне эту строку:

var score = this.score(term);

Что я хочу знать, откуда этот метод члена score () ? Я не нашел такого метода, встроенного в JS или jQuery.

Спасибо за помощь, м ^ е

1 Ответ

1 голос
/ 28 февраля 2011

score () взято из библиотеки Quicksilver . Это не очень ясно в сообщении , но Джон отвечает на тот же вопрос в комментариях.

...