Как переопределить поведение выбора по умолчанию: в автозаполнении пользовательского интерфейса jQuery? - PullRequest
9 голосов
/ 16 апреля 2011

У меня есть следующее:

$('#<%=txtCity.ClientID%>').autocomplete({
  source: function (request, response) {
    var parameters = {
      isoalpha2: '<%=Session["BusinessCountry"].ToString()%>',
      prefixText: request.term
    };
    $.ajax({
      url: '<%=ResolveUrl("~/AtomicService/Assets.asmx/GetCitiesWithState")%>',
      type: 'POST',
      dataType: 'json',
      contentType: 'application/json; charset=utf-8',
      data: JSON.stringify(parameters),
      success: function (data) {
        response($.each(data.d, function (index, value) {
          return {
            label: value.slice(value.indexOf(',')),
            value: parseInt(value.split(',')[0])
          }
        }));
      }

    });
  },
  minLength: 2,
  delay: 50,
  select: function (event, ui) {
    var city = ui.item.label.split(',')[0];
    var state = ui.item.label.split(',')[1];
    alert(city);
    alert(state);
    $('#<%=txtCity.ClientID%>').val(city);
    $('#<%=txtState.ClientID%>').val(state);
  },
});

Это все счастливые дни, кроме тех случаев, когда я выбираю элемент из списка автозаполнения, и я не хотел бы, чтобы автозаполнение заполняло элемент $('#<%=txtCity.ClientID%>').Как мне это сделать?Я видел .insertAfter, это то, на что я должен смотреть?

Помощь оценена.

Ответы [ 2 ]

19 голосов
/ 16 апреля 2011

Попробуйте вернуть false из события select :

...
select: function(event, ui) {
    var city = ui.item.label.split(',')[0];
    var state = ui.item.label.split(',')[1];
    alert(city);
    alert(state);
    $('#<%=txtCity.ClientID%>').val(city);
    $('#<%=txtState.ClientID%>').val(state);
    return false;
},

Из документации (выбрать событие):

срабатывает при выборе элемента из меню; ui.item относится к выбранный пункт. Действие по умолчанию выберите заменить текстовое поле значение со значением выбранного вещь. Отмена этого события предотвращает значение от обновления, но делает не мешает закрытию меню.

Вы можете попробовать это здесь.

3 голосов
/ 21 декабря 2012

Хотя это, вероятно, не будет иметь значения, вместо возврата false вы должны сказать event.preventDefault

См. event.preventDefault () против возврата false

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

...