Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   JQuery Autocomplete Как получить данные, вводимые пользователем в поле? (https://javascript.ru/forum/jquery/59140-jquery-autocomplete-kak-poluchit-dannye-vvodimye-polzovatelem-v-pole.html)

decadent42 29.10.2015 14:52

JQuery Autocomplete Как получить данные, вводимые пользователем в поле?
 
Как получить данные вводимые пользователем в поле? Например, пользователь вводит "Приве..." и через $.ajax в autocomplete приходит "Приве...". В функции в source: есть аргумент request, который по описанию подходит для этого, но как его передать в объект Label?:
source: function(request, response) {
        $.ajax({
          
          url: Drupal.settings.basePath + "autocomplete_arguments/autocomplete",
          type: 'post',
          data: {
            input: request.term,
            maxItems: 12
          },
          success: function(data) {
//При отсутствии результатов вывести виджет "Страница [данные в поле] не найдена" - то то и нужно сделать
            if(!data.length){
				var result = [
					{ label: 'Страница' + request.term + 'не найдена', value: request.term}
				]; response(result);
			}
			else{
				response($.map(data, function(item) {
					return {
						
						value: item,
						label: "[" + item.name + "] " + item.title + " (" + item.created + ")"
              };
            }));
			}
          }
        });
      },


Помогите пожалуйста:help: :help: :help: :help: :help: :help: :help: :help:

рони 29.10.2015 15:07

decadent42,
досточно в data прописать всё что вы указали
в строках 21 и 22
[{"title":"orange","id":"l_25", "name" : "or", "created"  : 2015 },{"title":"ррр","id":"1", "name" : "t", "created"  : 2070 }]

рони 29.10.2015 15:10

decadent42,
выше это для
label: "[" + item.name + "] " + item.title + " (" + item.created + ")",
                value: item.id

decadent42 29.10.2015 15:37

Т.е. вот так?
source: function(request, response) {

        $.ajax({

           

          url: Drupal.settings.basePath + "autocomplete_arguments/autocomplete",

          type: 'post',

          data: {
value: item,

                        label: "[" + item.name + "] " + item.title + " (" + item.created + ")",
            input: request.term,

            maxItems: 12 ,


          },

          success: function(data) {

//При отсутствии результатов вывести виджет "Страница [данные в поле] не найдена" - то то и нужно сделать

            if(!data.length){

                var result = [

                    { label: 'Страница' + request.term + 'не найдена', value: request.term}

                ]; response(result);

            }

            else{

                response($.map(data, function(item) {

                    return {

                         

                        value: item,

                        label: "[" + item.name + "] " + item.title + " (" + item.created + ")",

              };

            }));

            }

          }

        });

      },

рони 29.10.2015 15:48

decadent42,
нужные данные в data должен вернуть сервер -- в вашем коде ничего менять ненадо -- кроме строки 21

value: item,

item должен быть обьектом, а value строкой то есть типа

value: item.id

decadent42 29.10.2015 16:08

Я просто совсем не понимаю, зачем что-то изменять в 21-22 строках, там ведь находится объект с возвращаемыми значениями, а мне нужно вывести виджет("Страница [данные из поля] не найдена"), когда значений нет, т.е. в if (строка 12 -16). :-?

рони 29.10.2015 17:25

decadent42,
всё у вас должно работать ... если форматы везде соблюдены ... пример ниже ... строка 27 для теста
<!doctype html>
<html lang="en">
<head>
   <meta charset="utf-8">
  <title>autocomplete demo</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
  <script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>

</head>

<body>
<label for="autocomplete">Select: </label>
<input id="autocomplete">
<script>
	$("#autocomplete").autocomplete(
	  {
	  source: function(request, response) {
	      $.getJSON("https://discovery.gdbilet.ru/Rzhd/Train/SearchStation",
	        {
	        limit: 10,
	        q: request.term
	        }
	      )
	      .done(function(data)
	        {
	          data = [];
               if(!data.length){

                data = [

                    { name: 'Страница ' + request.term + ' не найдена', countryCode: request.term}

                ] };
	          response($.map
	            (data, function(item)
	              {
	                return {
	                value: item.countryCode,
	                label: item.name
	                }
	              }
	            )
	          );
	        }
	      );
	    },
	  minLength: 2,
	  cache: false
	  }
	);
</script>
</body>
</html>

decadent42 30.10.2015 21:55

Спасибо!


Часовой пояс GMT +3, время: 09:10.