2010-12-27 11 views
0

私は、オートコンプリートセットと完全に正常に動作するテキストボックスを持っています。しかし、私はそれがmatchSubset機能にjQueryオートコンプリート:matchSubsetオプションの問題

if (!options.matchCase) 
    s = s.toLowerCase(); 
var i = s.indexOf(sub); 

でautocomplete.jsファイルにエラーがスローされますmatchSubsetオプションを使用しようとします。 'オブジェクトはこのプロパティまたはメソッドをサポートしていません'というエラーが表示されます。以下は私のオートコンプリートコードです:

$('#txtUsers') 
    .autocomplete("AjaxHandler.asmx/GetUserData", { 
     width: 320, 
     max: 10, 
     minChars: 3, 
     matchSubset: true, 
     formatItem: function(data, i, n, value) { 
      return value.FullName + " (" + value.DepartmentName + ")"; 
     }, 
     parse: function(data) { 
      var items = eval($(data).text()); 
      return $.map(items, function(row, i) { 
       return { 
        data: row, 
        value: row, 
        result: row 
       } 
      }); 
     } 
    }) 
    .result(function(event, data, formatted, text) { 
     if (data) { 
      $(this).val(data[0].FullName); 
     } 
    }); 

初めて3文字を入力すると、正常に動作します。しかし、私が4番目の文字を入力すると、上記のエラーが出ます。データを解析する際に間違いをしていますか?私はWebサービスが私にラップされたデータを与えているので、解析関数のデータを評価しなければなりませんでした。 matchSubsetオプションを削除すると、コードは正常に動作しますが、毎回サーバーに照会します。どんな助け?


更新:問題は私の解析機能にあると思います。上記のmatchSubset関数のコードでは、 's'は文字列値であると予想されます。私の場合、FullName、DepartmentNameなどの複数の値を含むオブジェクトです。どのようにして解析関数を変更できますか?

+1

その行 'var items = eval($(data).text());'のようなものです。エラーが出る直前に 'data'の内容を調べてみましたか? (エラーを返す関数の 's'はオブジェクトの配列解析結果の' value'に対応しているようです) –

+0

$(data).text()は、文字列。それが私がオブジェクトを得るために評価しなければならなかった理由です。 – Ashish

答えて

1

まあ、valueを文字列に変更する必要があると思います(免責事項:jQuery.autocompleteの仕組みが分からない、正しい場所に文字列を入力する方法はわかります:)) 。だから、のようなものを使用します。

value: row.FullName + " (" + row.DepartmentName + ")" 

また、多分それはそれを2回evalしようとすると、いくつかのより多くのdataをチェック!

+0

あなたの推薦を試してください。 – Ashish

+0

ありがとうございました。問題は値がオブジェクトであることでした。私はそれを文字列に変換し、魅力的に働いた。もう一度ありがとう。 – Ashish

関連する問題