2013-01-07 6 views
12

私は、Igor VaynbergのSelect2 jQueryプラグインをInfinite Scroll with Remote Dataオプションで使用して、自分のウェブサイトの検索ボックスを自動補完します。 AJAXはうまくいっており、結果は表示されていますが、選択できません。変更イベントは一度も発生せず、結果をクリックすると何も起こりません。イベントがSelect2プラグインのajaxで検索された結果を妨害しています

Chromeコンソールにもエラーが表示されないため、構文エラーではなく、プラグインが無効な選択ボックスで間違っていると思います。 EDIT:結果リストに別のオンクリックイベントを試みたこともありませんでしたが、今はイベントに干渉する何かがあります。選択ボックス自体はタイプとだけ入力する

// Search 
$("#site-search").select2({ 
    placeholder: "Search posts", 
    minimumInputLength: 3, 
    ajax: { 
     url: "http://localhost/mysite/search", 
     dataType: 'json', 
     quietMillis: 500, 
     data: function (term, page) { 
      return { 
       q: term, 
       page_limit: 10, 
       page: page // page number 
      }; 
     }, 
     results: function (data, page) { 
      var more = (page * 10) < data.length; // whether or not there are more results available 

      // return the value of more to tell if more results can be loaded 
      return {results: data, more: more}; 
     } 
    }, 
    formatResult: function(post) { 
     // return html markup for individual result item 
     markup = '<img src="'+post.image+'" style="width:40%;float:left;margin-right:5px">'; 
     markup += '<p>'+post.title+'</p>'; 
     markup += '<div class="clearfix"></div>'; 
     return markup; 
    }, 
    formatSelection: function(post) { 
     // This shows up in the select box 
     return post.title; 
    }, 
    dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller 
}).on('change', function(e) { 
    try { 
     var slug = e.val.slug; 
     window.location.href = "http://localhost/mysite/posts/"+slug; 
    } catch(error) { 
     console.log('Selected search result is invalid: '); 
    } 
}); 

ここに私のコードは、現在だ

、:

<input type="hidden" class="bigdrop" id="site-search" style="width:100%;height:auto"> 
+0

私はconsole.logを変更イベントの開始に配置しようとしましたが、決して起動されませんでした。 – BenjaminRH

+0

twitter json apiで私のローカルであなたのコードを試してみました。とてもうまく機能しました。別のイベントリスナーがこの変更イベントリスナーの実行を妨げる可能性があります。実行中のajaxデータのサンプルをインターネット上で実例として表示できますか? –

+0

@MuratÇorlu私は一時的にhttp://indiewebseries.comに住んでいます。右側のサイドバーの上部にある検索バーです。 – BenjaminRH

答えて

46

あなたの問題隠されたあなたの結果データがという名前のプロパティを持っていない、のように思えます"id"。 Select2 plugins wants an id fieldがデータにあり、そうでない場合は、オプション「選択不可」になります。この動作を無効にするためのid関数を与えることができます:

$("#site-search").select2({ 
    id: function(obj) { 
     return obj.slug; // use slug field for id 
    }, 
    ... 
+1

私は今これをチェックしています、私はどこでもドキュメンテーションでこれを見たことはありません! – BenjaminRH

+0

それでした!大変ありがとうございます。私はあなたに賞金を授与します。 – BenjaminRH

+1

@muratありがとう、あなたの時間を節約する – Arun

関連する問題