2012-05-15 2 views
4

Мне нужна помощь с кодом ниже.JQuery UI автозаполнение

$("#auto_cp").autocomplete({ 
    minLength: 3, 
    //source 
    source: function(req, add) { 
     $.getJSON("friends.php?callback=?", req, function(data) { 
      var suggestions = []; 
      $.each(data, function(i, val) { 
       suggestions.push(val.name); 
      }); 
      add(suggestions); 
     }); 
    }, 
    //select 
    select: function(e, ui) { 
     alert(ui.item.value); 
    } 
});​ 

с помощью FireBug, я получаю это в моей консоли:

jQuery171003666625335785867_1337116004522 ([{ "Имя": "97300 Cayenne", "ZZZ": "203"}, {» имя ":" 97311 Roura "," zzz ":" 201 "}, {" name ":" 97312 Saint Elie "," zzz ":" 388 "}, {" name ":" 97320 Saint Laurent du Maroni "," zzz ":" 391 "}, {" name ":" 97351 Matoury "," zzz ":" 52 "}, {" name ":" 97354 Remire MontJoly Cayenne "," zzz ":" 69 "}, {" name ":" 97355 Macouria Tonate "," zzz ":" 449 "}])

Все работает очень хорошо, но я не знаю, как получить значение «zzz» для выбранного элемента.

Я попытался

alert(ui.item.zzz); 

Но это не работает.

+0

Что вы видите в предупредительном всплывающем окне? – lbstr

+0

В всплывающем окне предупреждения я вижу: undefined – user367864

+0

И что вы видите, если вы выполняете 'alert (ui.item)' в функции select? – lbstr

ответ

0

Функция источника - это только заполнение имени. Если вы хотите все от этой структуры данных, сделайте следующее:

$("#auto_cp").autocomplete({ 
    minLength: 3, 
    //source 
    source: function(req, add) { 
     $.getJSON("friends.php?callback=?", req, function(data) { 
      var suggestions = []; 
      $.each(data, function(i, val) { 
       suggestions.push(val); //not val.name 
      }); 
      add(suggestions); 
     }); 
    }, 
    //select 
    select: function(e, ui) { 
     alert(ui.item.value.zzz); 
    } 
});​ 
+0

Хм, я попробовал это, но он сломал мой автозаполнение. Я имею в виду, когда начинаю печатать, я не получаю никаких результатов. Я вижу «ответ» в Firebug, но, насколько я могу видеть, val.name не отправляется. – user367864

0

Это, как представляется, массив объектов ... что ваш может отсутствовать является «[0]» или вообще «[индекс]» ,

Пожалуйста, проверьте это: jqueryui.com/demos/autocomplete/#event-select

+0

Он также не работает Да, это массив, вот PHP-код файла, который я вызываю через ajax $ query = mysql_query ("SELECT cv_ville, cv_numville FROM cms_code_ville WHERE cv_ville LIKE '%". $ _GET [ 'термин'] "%"."); \t // построить массив результатов для ($ х = 0, $ NumRows = mysql_num_rows ($ запроса); $ X $ $ row ["cv_ville"], "zzz" => $ row ["cv_numville"]); } \t // эхо JSON на страницу $ response = $ _GET ["callback"]. "(". json_encode ($ friends). ")"; echo $ response; – user367864

+0

Ahh, но что, если вы используете: alert (ui [0] .zzz) ?? – Romias

+0

i get: ui [0] undefined – user367864

5

автозаполнения виджет ожидает источник данных в виде массива с либо:

  • Объектов, содержащими меток свойства, значения свойство а, или оба
  • Простые значения строк

Вы в настоящее время создания второго (массив строковых значений), которая работает хорошо, но вы также можете немного подправить ваши данные, как вы итерацию над ней, а также предоставить другие свойства в объекте:

$("#auto_cp").autocomplete({ 
    minLength: 3, 
    //source 
    source: function(req, add) { 
     $.getJSON("friends.php?callback=?", req, function(data) { 
      var suggestions = []; 
      $.each(data, function(i, val) { 
       suggestions.push({ 
        label: val.name, 
        zzz: val.zzz 
       }); 
      }); 
      add(suggestions); 
     }); 
    }, 
    //select 
    select: function(e, ui) { 
     alert(ui.item.zzz); 
    } 
});​ 

Теперь, поскольку массив, который вы снабжаете виджетами, содержит объекты с именем с именем, вы должны получить функциональность автозаполнения, а также получить доступ к свойству zzz.

Вот рабочий пример (без вызова AJAX): http://jsfiddle.net/LY42X/

+0

Привет, я попробовал ваше решение, и я все равно получаю «неопределенный». Хорошо для вашего рабочего примера, но я должен заставить его работать с вызовом ajax. Не могли бы вы помочь? – user367864

+0

Какой URL вы используете? Поскольку вы делаете вызов JSONP, я могу, вероятно, сделать JSFiddle одним и тем же URL. –

+0

вот мой url: http://www.directauto-assu.com/testC/friends.php – user367864

Смежные вопросы