2013-06-29 2 views
24

jQuery UIのオートコンプリートで問題が起こる可能性があります。私のソースは、私はすべてが正常に動作しますjQuery UIオートコンプリートでは、入力フィールドにラベルの代わりに値が表示されます

$(function() { 
    $("#search").autocomplete({ 
     source: PK.getAutocompleteSource(), 
     focus: function(event, ui) { 
      $("#search").val(ui.item.label); 
      return false; 
     }, 
     select: function(event, ui) { 
      $("#search").val(ui.item.label); 
      PK.render(ui.item.value); 
     } 
    }); 
}); 

でウィジェットを起動してい

var ac = [ 
    { 
     label: "One Thing", 
     value: "One-Thing" 
    }, 
    { 
     label: "Two Thing", 
     value: "Two-Thing" 
    },  
] 

です。 #search入力フィールドに入力すると、一致するラベルがドロップダウンに表示され、selectが正しく検索されます。ウィジェットは、#search入力フィールドにlabelという文字を表示しています。これは、矢印キー(またはマウス)を使用してドロップダウンで別のアイテムを選択するためです。ただし、Enterキーを押すとすぐに、#search入力フィールドにlabelの代わりにvalueが入力されます。だからフィールドはの代わりにの1つのおもとと表示されます。

これを修正するにはどうすればよいですか?確かに私が期待しているのは、より合理的な行動ですね。

答えて

43

ラベルがあなたの価値になりたい場合は、ソースが

代わり
var ac = ["One Thing", "Two Thing"]  

も持っている、ちょうど、オートコンプリートのデフォルトのアクションのselect方法は、(指定されている場合)あなたの値としてvalueオブジェクトを置くことです入力。あなたはまた、選択機能でevent.preventDefault()を入れることができますし、(あなたが持っているように)あなたのラベルがテキストボックスのonFocusであなたの値になるようにし、このコードを使用ONSELECTたい場合は、値として

select: function(event, ui) { 
     event.preventDefault(); 
     $("#search").val(ui.item.label); 
     PK.render(ui.item.value); 
    } 
+9

おかげで、 'event.preventDefault();'トリックをしました。真剣に、これはドキュメントにあるはずです。 – punkish

+5

矢印キーを使用して選択すると、イベントはトリガーされません。 – dpp

+3

@dpp 'focus'コールバック(元の質問内)はfalseを返しました。これは、使用する矢印キーを使用するときのデフォルトの動作をスキップする別の方法です'value'ではなく' label'です。リストから項目が選択されると、それは 'select'コールバックを呼び出し、' preventDefault() 'または' return false'を使ってデフォルトの動作をスキップします。 –

18

をラベルを配置します。

select: function(event, ui) { 
     $('#hiddenid').val(ui.item.value); 
     event.preventDefault(); 
     $("#search").val(ui.item.label); }, 

focus: function(event, ui) { 
     event.preventDefault(); 
     $("#search").val(ui.item.label);} 

(onSelectイベントの設定のみ)onFocusイベントがありませんでした。したがって、値はテキスト入力に引き続き表示されます。

3

私はまだ値を示す矢印キーに問題がありました。だから、私は実際にはラベルと値の両方をラベルに代入し、その値をデータの3番目のプロパティに代入する方が良いことが分かりました。たとえば、idに入れてみましょう。あなたはselectイベントを使用する場合

var ac = [ 
    { 
     label: "One Thing", 
     value: "One Thing", 
     id: "One-Thing", 
    }, 
    { 
     label: "Two Thing", 
     value: "Two Thing", 
     id: "Two-Thing" 
    },  
] 

その後、あなたは、UIからIDを取得することができます。

select: function(event, ui) { 
    PK.render(ui.item.id); 
} 
関連する問題