Показ никаких результатов обменивается сообщениями на автоматическом заполнении jQuery

Я использую плагин автоматического заполнения jQuery, НЕ автоматическое заполнение UI. Я хотел бы сделать неактивируемое по щелчку, Никакое сообщение Результатов не появляется каждый раз, когда они вводят что-то, что не имеет никаких результатов автоматического заполнения. Как я могу сделать это?

9
задан bgcode 11 August 2010 в 20:42
поделиться

3 ответа

Вот решение, которое требует нескольких небольших правок в jquery.autocomplete.js.

В jquery.autocomplete.js:

Отредактируйте функцию hideResultsNow() так, чтобы она первым делом вызывала emptyData()

function hideResultsNow() {

    $('#emptyData').show();
    ...
}

Измените привязку нажатия клавиш в поле ввода, чтобы скрывать #emptyData после каждого нажатия

$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {

    $('#emptyData').hide();
    ...
}

Скрывайте #emptyData после успешного выбора (прямо перед тем, как она вернет true)

function selectCurrent() {

    ...
    $('#emptyData').hide();
    return true;
}

Затем вам нужно добавить div с тем же списком стилей с именем #emptyData в HTML под полем ввода. Вот полный HTML для тестовой страницы, которую я использовал.

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/demo/main.css" type="text/css" />
  <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.css" type="text/css" />

  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.bgiframe.min.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.dimensions.js"></script>
  <script type="text/javascript" src="jquery.autocomplete.js"></script>
  <script>
  $(document).ready(function(){
    var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" ");
  $("#example").autocomplete(data);

  });
  </script>

</head>
<body>
  API Reference: <input id="example" /> (try "C" or "E")


  <div id='emptyData' class='ac_results' style='display: none; position: absolute; width: 151px; top: 20px; left: 91px;'>
    <ul style="max-height: 180px; overflow: auto;">
      <li id='noDataMsg' >No Results</li>
    </ul>
  </div>

</body>
</html>

Позиция #emptyData была взята из позиции автозаполнения, и стиль CSS не совсем такой же, как для правильных ответов, но кроме этого, я не думаю, что что-то нужно менять. Надеюсь, это решит вашу проблему.

5
ответ дан 4 December 2019 в 23:38
поделиться

Вот 1/2 решения; пусть ваш вызов AJAX возвращает строку «Нет результатов», если он не дает результатов.

Чтобы сделать единственный результат недоступным для кликов, вероятно, потребуется посмотреть в исходный код плагина.

0
ответ дан 4 December 2019 в 23:38
поделиться

Я думаю, вместо того, чтобы использовать автозаполнение для ajax, вы могли бы сделать это самостоятельно, а затем передать результаты в автозаполнение с простым фильтром между этими двумя, чтобы не было никаких результатов с сервера.

var input = $('input.autocomplete');
var inputLimit = 10;

// Create warning message and hide it
var warning = $('<p></p>').insertAfter(input).text('No results').addClass('warning').hide();

input.keyup(function(){
    warning.hide();

    $.get('url.php', {q: this.value, limit: inputLimit}, function(data){
        if(data){
            input.autocomplete(data);
        } else {
            warning.show();
        }
    }
});

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

1
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: