2011-11-17 14 views
0

jQueryを使用する必要があります。書かなかったため、テンプレートに含まれていました。jQuery Ajax推測型/予測問題

「推測タイプ」を実行し、検索するデータとしてメインナビゲーションを使用する関数があります。入力すると、サイト内のページがドロップダウンに表示されます。

データベースから顧客名をドロップダウンする必要がありますが、機能が動作しないようです。

function searchInNav(s) 
    { 
     // Split keywords 
     var keywords = s.toLowerCase().split(/\s+/); 
     var nbKeywords = keywords.length; 

     // Search links 
     //var links = $('nav a'); // original 
      var links = []; 

     // LOAD CUSTOMERS AND EVENTS 
     $.post('includes/ajax/global.php', { list: 'search', text: keywords }, 
      function(data){ 
       alert(data); 
       links.push($(data)); 
      }, 
      "html" 
     ); 

     var matches = []; 
     links.each(function(i) 
     { 
      var text = $(this).text().toLowerCase(); 
      var textMatch = true; 
      for (var i = 0; i < nbKeywords; ++i) 
      { 
       if (text.indexOf(keywords[i]) == -1) 
       { 
        textMatch = false; 
        break; 
       } 
      } 

      if (textMatch) 
      { 
       // All keywords found 
       matches.push(this); 
      } 
     }); 

     // Build results list 
     var nbMatches = matches.length; 
     if (nbMatches > 0) 
     { 
      var output = '<p class="results-count"><strong>'+nbMatches+'</strong> match'+((nbMatches > 1) ? 'es' : '')+'</p>'; 
      output += '<ul class="small-files-list icon-html">'; 

      for (var m = 0; m < nbMatches; ++m) 
      { 
       // Text with highlighted keywords 
       var link = $(matches[m]); 
       var text = link.text(); 
       var path = [text]; 
       for (var i = 0; i < nbKeywords; ++i) 
       { 
        text = text.replace(new RegExp('('+keywords[i]+')', 'gi'), '<strong>$1</strong>'); 
       } 

       // Path 
       var parent = link; 
       while ((parent = parent.parent().parent().prev('a')) && parent.length > 0) 
       { 
        path.push(parent.text()); 
       } 

       output += '<li><a href="'+matches[m].href+'">'+text+'<br><small>'+path.reverse().join(' > ')+'</small></a></li>'; 
      } 

      return output+'</ul>'; 
     } 
     else 
     { 
      return '<p class="results-count">'+settings.messageNoMatches+'</p>'; 
     } 
    }; 

links.each行には、Object is not methodというエラーが表示されます。

修正する必要はありますか?

ありがとうございます!

//var links = $('nav a'); // original 

$( 'NAVのA')はNAV内のすべてのタグのjQueryオブジェクトを作る:

答えて

0

は、これはあなたの問題です。あなたは単なる配列です。

あなたは

for(var i = 0; i < links.length; i ++) 
    { 
     var text = links[i].toLowerCase(); 
     var textMatch = true; 
     for (var n = 0; n < nbKeywords; ++n) 
     { 
      if (text.indexOf(keywords[n]) == -n) 
      { 
       textMatch = false; 
       break; 
      } 
     } 

     if (textMatch) 
     { 
      // All keywords found 
      matches.push(links[i]); 
     } 
    }); 

...配列ではなくjQueryオブジェクトとしてそれを処理するために、その全体のループを変更する必要があります。しかし、私は上記のこの変更をguearnteeすることはできません。一般的な考え方は、jqueryオブジェクトから配列に変更したので、それに応じてループを変更する必要があるということです。

はまた、このです:

links.push($(data)); 

データが期待DOM IDを返していますか? #some_divのような?それ以外の場合、$()は意味をなさない。それはちょうどデータでなければなりません。