Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Автовыбор при автозаполнении формы (https://javascript.ru/forum/misc/74152-avtovybor-pri-avtozapolnenii-formy.html)

ironkiss 18.06.2018 12:14

Автовыбор при автозаполнении формы
 
Приветствую ув. форумчане.
Помогите, пожалуйста, решить такую проблему.

В общем у меня стоит в одной из форм автозаполнение, стандартный jqueryui

$( "#block" ).autocomplete({
  source: function( request, response ) {
	$.ajax({
	  url: "source/sugg.php",
	  dataType: "jsonp",
	  data: {
		max: "7",
		term: request.term
	  },
	  success: function( data ) {
		response( data );
	  }
	});
  },
  minLength: 3,
  select: function( event, ui ) {
	//действие при выборе...
	
	return false;
  }
})


Мне нужно чтобы если пользователь ни чего не выбрал из списка, а просто нажал tab (для переключения на следующее поле) или мышкой переключился на следующее поле. В общем когда поле поиска не в фокусе и ни чего не было выбрано, автоматом имитировался выбор первого найденного результата.

В интернете нашёл, что это есть стандартно (autoFocus: true,) но не помогает.

Manyasha 18.06.2018 12:35

ironkiss, здравствуйте, попробуйте так:
$( "#block" ).blur(function(){
	if ($(this).val() == "" ) $(this).val($(this).autocomplete( "option", "source" )[0])
});

laimas 18.06.2018 13:02

Manyasha,
нужно всегда вырезать крайние пробелы перед проверкой.

ironkiss 18.06.2018 13:22

Цитата:

Сообщение от Manyasha (Сообщение 487624)
ironkiss, здравствуйте, попробуйте так:
$( "#block" ).blur(function(){
	if ($(this).val() == "" ) $(this).val($(this).autocomplete( "option", "source" )[0])
});

Спасибо за ответ, но к сожалению, не помогло :(

рони 18.06.2018 15:18

ironkiss,
строка ноль
var zip = [];
это в параметры
,
     response: function( event, ui ) {
     zip = ui.content.map(function(el) {
     return el.value
     })},
      close: function( event, ui ) {
          var value = this.value;
          if(zip.length && zip.indexOf(value) == -1) this.value = zip[0]
      }

ironkiss 19.06.2018 12:30

рони,
к сожалению не помогло, не сработало. Возможно это из-за того, что чуток не хватает знаний.
В общем как я понимаю response выполняется до того как формируется меню и zip = ui.content.map(function(el) формирует карту результатов поиска. Почему content? Если данные в item?
возвращает return el.value — что это значит? что в теории должно возвращать?

Далее close срабатывает в случае скрытия меню, в value передаётся this.value что там должно быть?

И почему value, если данные в ui.item

рони 19.06.2018 13:17

ironkiss,
нужен живой пример.

рони 19.06.2018 13:20

ironkiss,
success: function( data ) - что в data, формат данных?

ironkiss 19.06.2018 13:26

рони,
вот пример: http://browse.kanaspo.com/new/
в data там json (пример: http://browse.kanaspo.com/new/source/sugg.php?term=omsk)

рони 19.06.2018 14:11

ironkiss,
var zip = [];
$( "#ab" ).autocomplete({
  source: function( request, response ) {
    $.ajax({
      url: "source/sugg.php",
      dataType: "jsonp",
      data: {
        max: "7",
        term: request.term
      },
      autoFocus: true,
      success: function( data ) {
        response( data );
      }
    });
  },
     response: function( event, ui ) {
     zip = ui.content.map(function(el) {
     return el.city + " (" + el.iata + ")"
     })},
      close: function( event, ui ) {
          var value = this.value;
          if(zip.length && zip.indexOf(value) == -1) this.value = zip[0]
      },

  minLength: 3,
  select:


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