Добавить пользовательский элемент с нулевым значением в автозаполнение jquery - PullRequest
0 голосов
/ 19 марта 2020

Используя jQuery виджет автозаполнения , я хотел бы добавить один элемент, если не найдено ни одного критерия. Этот элемент добавляется просто отлично, но проблема в том, что я не могу установить значение этого элемента на null. я получаю value элемента с тем же текстом, что и label

Пример кода:

source: function(request, response)
{
    //suggestions prefilled via AJAX...

    var items = [];

    if(suggestions.length)
    {
        for(var i in suggestions)
        {
            var item = suggestions[i];

            item.value = suggestions[i].id;
            item.label = suggestions[i].text;

            items.push(item);
        }
    }
    else
    {
        var item = {
            value : null,
            label : "some text..."
        };

        items.push(item);
    }

    response(items);
}

Когда я утешаю выбранный элемент, это то, что я получаю :

select: function(event, ui)
{
    console.log(ui.item.value);
    //if item's value was set to null, then label
    //if item's value was set to 0, then label
    //if item's value was set to "", then label
    //if item's value was set to 123, then 123
}

РЕДАКТИРОВАТЬ : очевидно, это работало в какой-то момент в истории ...

В этой скрипке с последними jquery и jquery UI проблема присутствует, но в этот с jquery 1.10.4 был последним jquery UI, который работал так, как я хочу.

1 Ответ

1 голос
/ 21 марта 2020

Короткий ответ, кажется, игнорирует его, когда у вас есть 1 элемент в списке для выбора.

Пример:

https://jsfiddle.net/Twisty/6oa0yg24/2/

$(function() {
  var items = [{
      value: 1,
      label: 'neo'
    },
    {
      value: 2,
      label: 'trinity'
    },
    {
      value: 3,
      label: 'morpheus'
    },
    {
      value: null,
      label: 'smith'
    },
    {
      value: undefined,
      label: 'switch'
    },
    {
      value: "",
      label: 'tank'
    }
  ];

  $("#autocomplete").autocomplete({
    source: items,
    select: function(e, ui) {
      console.log(ui.item.value);
    }
  });
});

Если мы введем t, мы получим несколько совпадений и выберем smith, значение останется пустым. Если мы введем sm, и теперь единственная опция - smith, тогда в качестве значения добавляется «кузнец». Почему? Я не знаю, но я протестировал все три сценария ios, и каждый делает это. Я уверен, что все сводится к этим строкам (5864 - 5869 в https://code.jquery.com/ui/1.12.1/jquery-ui.js):

// reset the term after the select event
// this allows custom select handling to work properly
this.term = this._value();

this.close( event );
this.selectedItem = item;

Я подозреваю, что вы можете перезаписать его с помощью Widget Factory, если вы так склонны.

...