2016-10-13 19 views
0

私は、ajax呼び出しを使用してデータベースからの提案で自動完成する検索フィールドを作成しようとしています。アイテムを選択すると、検索フィールドを更新したいと思います。現在、このテキストボックスに何かを入力すると、空の選択が返されます。どんな助けもありがとう。JQuery UIオートコンプリートAJAXコール

ここでは、推奨される変更で更新されたコードですが、今は空のリストを取得しています。

function autoCompleteCheckRun() { 
$('#autocompleteCR') 
      .autocomplete({ 
       minLength: 0, 
       source: function (request, response) { 
        $.ajax({ 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         url: './PayInvoicesWS.asmx/GetCheckRun', 
         data: "{'description':'" + document.getElementById('autocompleteCR').value + "'}", 
         dataType: "json", 
         success: function (data) { 
          var rows = autocompleteJSONParseCode(data); 
          response(rows); 
         }, 
         error: function (result) { 
          alert("Error"); 
         }, 
         select: function (event, ui) { 
          var checkRunData = $("#CheckRunDescription"); 
          var checkRunID = $("#CheckRunID"); 
          checkRunData.val(ui.item.label); 
          checkRunID.val(ui.item.value); 


         } 
        }); 
       } 
      }); 
} 

function autocompleteJSONParseCode(data) { 
    var rows = new Array(); 
    var rowData = null; 
    for (var i = 0, dataLength = data.d.length; i < dataLength; i++) { 
     rowData = data.d[i]; 
     // alert(rowData.term2+":"+rowData.term1);//uncomment to see data as it parses 
     rows[i] = { 
      value: rowData.CheckRunID, 
      label: rowData.Description 
     }; 
    } 

    return rows; 
} 

div class="ui-widget"> 
         <label for="autocompleteCR" id="checkRunLabel">Check Run Lookup:</label> 
         <input type="text" id="autocompleteCR" /> 
        </div> 

example

+1

何丁度あなたがオートコンプリートの提案から項目を選択する上で達成したいですか?アイテムを選択すると、選択したアイテムが自動的に埋められます。あなたの質問をよりよく説明できますか? – gschambial

+0

別のテキストボックスに値を設定して、その値を特定のデータベーステーブルのアイテムを取得する別のajax呼び出しのパラメータとして使用します。 – Crumblenautjs

+1

私の答えで更新されたフィドルをチェックしてください。私は別のボックスに値を書き込むように変更しました。 – gschambial

答えて

1

あなたはselect機能を置き忘れてきました。 source関数からそれを移動して、source関数に平行に置きます。

$('#autocompleteCR') 
      .autocomplete({ 
       minLength: 0, 
       source: function (request, response) { 
        $.ajax({ 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         url: './PayInvoicesWS.asmx/GetCheckRun', 
         data: "{'description':'" + document.getElementById('autocompleteCR').value + "'}", 
         dataType: "json", 
         success: function (data) { 
          var rows = autocompleteJSONParseCode(data); 
          response(rows); 
         }, 
         error: function (result) { 
          alert("Error"); 
         } 
        }); 
       }, 
       select: function (event, ui) { 
          var checkRunData = $("#CheckRunDescription"); 
          var checkRunID = $("#CheckRunID"); 
          checkRunData.val(ui.item.label); 
          checkRunID.val(ui.item.value); 


       } 
      }); 

私はあなたが探しているもののために働く例を作っています

function(el) { 
return { 
    value: el.CheckRunID, 
    label: el.Description 
    }; 
})); 

https://jsfiddle.net/gschambial/d0g3dLvu/19/

$("#tags").autocomplete({ 
    source: availableTags, 
    select: function(event, ui) { 
      alert('Label is :' + ui.item.label + ' and Value is : ' +ui.item.value); 
    } 
}); 

変更

function(el) { 
return { 
    CheckRunID: el.CheckRunID, 
    Description: el.Description 
    }; 
})); 

AJAX呼び出しの成功関数内data.dする変数を割り当てる:

、代わりに

checkRunData.val(ui.item.CheckRunID + ui.item.Description); 

使用

checkRunData.val(ui.item.label + ui.item.value); 
+0

あなたのお返事ありがとうございます。私は推奨された変更を加えました。フィールドにテキストを入力すると、サーバーサイドのコードがヒットし、探しているオブジェクトのリストが返されます。ただし、オートコンプリートでは、元の投稿で指定した空の選択が返されます。おそらく、私がdom要素をどのように選択しているかと関係しているでしょう。 – Crumblenautjs

+0

'console.log(ui.item.value)'を試して、開発者用コンソールに表示される内容を教えてください。 – gschambial

+0

また、あなたのコードから 'event.preventDefault();'を削除してみてください。 – gschambial

0

これは、それが動作するようになったものですの。また、@ gschambialの私の選択機能がどこにあるかについての提案もあります。もともと、ソース関数の中にいたのですが、一度それを外に移動すると、リストの値をdom要素に代入することができました。

function autoCompleteCheckRun() { 
$('#autocompleteCR') 
      .autocomplete({ 
     minLength: 0, 
     source: function(request, response) { 
      $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: './PayInvoicesWS.asmx/GetCheckRun', 
       data: "{'description':'" + document.getElementById('autocompleteCR').value + "'}", 
       dataType: "json", 
       success: function(data) { 
        var el = data.d; 
        response($.map(el, 
         function(el) { 
          return { 
           label: el.Description, 
           value: el.CheckRunID 
          } 
         })); 
       }, 
       error: function(result) { 
        alert("Error"); 
       } 
      }); 
      }, 
      select: function (event, ui) { 
        $("#CheckRunDescription").val(ui.item.label); 
        $("#CheckRunID").val(ui.item.value); 
       event.stopPropagation(); 
      } 

      }); 
     } 

ビュー:

<div class="ui-widget"> 
         <label for="autocompleteCR" id="checkRunLabel">Check Run Lookup:</label> 
         <input type="text" id="autocompleteCR" /> 
        </div> 
<div class="divTableCell"> 
       <label for="CheckRunDescription" id="checkRunDescriptionLabel">Description:</label> 
       <input type="text" id="CheckRunDescription" style="width: 270px;" /> 
      </div> 
関連する問題