Передача значения из цикла for в ajax в поле формы - PullRequest
0 голосов
/ 30 августа 2018

У меня есть некоторый javascript, который принимает пользовательский ввод, запрашивает конечную точку с этим вводом через ajax и возвращает поле из результатов в виде добавления <option> к datalist. Это работает правильно, и я вижу именно то, что мне нужно в списке опций.

Следующая часть, над которой я работал, заключается в том, что, когда я щелкаю опцию, я хочу, чтобы другие связанные с ней поля в объекте заполняли значение для ввода формы. У меня все это структурировано, но когда я нажимаю на элемент, он говорит result is not defined в этой строке:

$("#groupName").val(result[$(foundOption).attr('srindex')]._source.name);

Таким образом, мои параметры верны, и когда я щелкаю опцию, она отражает выбранную опцию в консоли. Проблема в том, что я, по-видимому, неправильно передаю результат в мой else if.

Иерархия моего _источника верна, но я просто не знаю, как мне нужно изменить аргумент .val для получения правильного значения.

Есть идеи?

$('#productInput').on('input', function () {
  let _this = $(this);
  let foundOption;
  let optSelector = `option[value='${_this.val()}']`;
  if (_this.val() === '') {
    return;
  } else if ((foundOption = $('#returnedProducts').find(optSelector)).length) {
    console.log(optSelector); //this prints the option[value] of the clicked value as it should
    $("#groupName").val(result[$(foundOption).attr('srindex')]._source.name);
    $("#groupNum").val(result[$(foundOption).attr('srindex')]._source.code);
  } else {

    const searchResult = $(this).val(); 
    $.ajax({ url: '/account/autocomplete', 
      data: {
        search_result:searchResult
      },
      "_token": "{{ csrf_token() }}",
      type: "POST", 
      success: function (response) {
        console.log(response);

        console.log(searchResult);
        $("#returnedProducts").empty();

        let result = response.hits.hits;

        console.log(result);
        for(let i = 0; i < result.length; i++) {
          $("#returnedProducts").append("<option srindex=" + [i] + " value=" + result[i]._source.name + ">" + result[i]._source.name + "</option>");


        }
      }
    });
  }
});

Обновление: мой объект выглядит так

hits
  hits
    _source
      name
      code

скрипка http://jsfiddle.net/qhbt569o/8/

1 Ответ

0 голосов
/ 30 августа 2018

Рабочий пример .

Вы просто должны изменить _source на source внутри цикла, как:

for (let i = 0; i < result.length; i++) {
  $("#returnedProducts").append("<option srindex=" + [i] + " value=" + result[i].source.name + ">" + result[i].source.name + "</option>");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...