2014-09-21 5 views
0

Я пытаюсь изучить разработку сайта. При изучении автозаполнения функции jquery я попытался установить метки.JQuery: Autocomplete with label

function autocomplete (data) { 
     var data = data.toString(); 
     var availableTags = data.split(','); 
     var autocompleteData = []; 
     for (var i = 0; i < availableTags.length; i++){ 
      autocompleteData[i] = {}; 
      autocompleteData[i].label = i.toString(); 
      autocompleteData[i].value = availableTags[i]; 
     } 
     $("#tags").autocomplete({ 
      source: autocompleteData, 
      select: function (event, ui) { 
       printautocomplete(event, ui) 
      } 
     }); 
    }; 

Автозаполнение [i] .value является допустимой строкой.

autocompleteData[0] 
Object {label: 0, value: "Peter"} 

Однако я не вижу никаких предложений. Что не так с тем, как я использую API?

В API говорит: «Array: массив может быть использован для локальных данных Есть два поддерживаемых форматов:..

An array of strings: [ "Choice1", "Choice2" ] 
OR An array of objects with label and value properties: [ { label: "Choice1", value: "value1" }, ... ] 

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

ответ

0

Автозаполнение работает нормально. Вместо завершения «значения» он завершает «метку». Так что, когда я печатаю «1», он предлагает «1», «10», «11» и т. Д.

Autocomplete applying value not label to textbox отвечает, как изменить значение на значение.

0

Я скептически относятся к строке 2 в коде (var data = String()data;) Я хотел бы использовать: var data = data.toString();

Но если вы уверены в том, что элементы autocompleteData действительно имеют действительные строки, то моя догадка будет то, что, возможно, вы забыли чтобы дать идентификатор '#tags' вашему элементу поля html.

Наконец, если это не так, чтобы устранить эту проблему, будет пытаться извлекать select: опцию из объекта, который вы передаете в autocomplete() в строке, начинающейся: $("#tags").autocomplete(... так, что только опции источника передается.

Еще одна вещь, чтобы проверить, когда код запускается. Возможно, что функция document.ready() необходима, чтобы гарантировать, что при добавлении функции автозаполнения к элементу DOM с идентификатором '#tags' этот элемент уже создан.

+0

он работает полностью нормально, если я использую «источник: доступныеТаги» вместо «source: autocompleteData». –

+0

Код работает, но он автозаполняется на основе метки, а не значений. –

+0

да, он должен соответствовать введенному тексту, чтобы «наклеить», а затем отправить соответствующее «значение» на все, что получает его на вашей странице, когда пользователь отправляет вход. Вы можете избежать этого, только предоставив «значение» в своих объектах «autocompleteData» (отбросьте строку, добавляющую метку с помощью i.string), или просто отправьте массив параметров строки (так как вы заметили, что это 'availableTags' в любом случае, так что вы может сократить ваш код, просто используя этот массив, как сразу после его инициализации. – Ralph