JQuery UI Автозаполнение - PullRequest
2 голосов
/ 26 марта 2011

Я использую плагин автозаполнения пользовательского интерфейса jQuery, и все хорошо, за исключением того факта, что когда пользователь нажимает значение, которое он хочет, функция, которую я назначил методу "select:", запускается дозначение поля изменено.Поэтому, если я введу «Foo» в поле ввода, а затем щелкните совпадение при автозаполнении для «Foo Bar», функция обнаружит, что значение было набрано (в данном случае «Foo»), а не значение, выбранное из автозаполнения.список.Как только функция запускается (в этом случае у меня просто появляется всплывающее окно с предупреждением w / this.value), значение поля ввода устанавливается равным значению, выбранному в списке автозаполнения.Эта проблема не возникает, если пользователь выбирает параметр с клавиатурой (клавиши со стрелками -> вкладка), только когда используется мышь.

  $(function()
  {
    var aEmps = 
    [
<?php
echo $sEmps;
?>    
    ];

    $("#slast").bind( "keydown", function( event ) {
      if ( event.keyCode === $.ui.keyCode.TAB &&
          $( this ).data( "autocomplete" ).menu.active ) 
          { event.preventDefault(); }
    })
    .autocomplete({
      source: aEmps,
      select: function(event, ui)
      {
        var aName = $(this).val();
        alert(aName);
      }
    })
  });

Так как большинство пользователей будут взаимодействовать с этим с помощью мыши, я должен найти способ получить значение, прежде чем запускать функцию «select:».Я полагаю, что могу приспособиться к этому, добавив условие в оператор до автоматического завершения, но мне нужна помощь в поиске правильного синтаксиса.

Ответы [ 2 ]

0 голосов
/ 26 марта 2011

Попробовав несколько подходов, я обнаружил, что простая привязка функции обратного вызова к событию close работает очень хорошо.Я добавил некоторую обработку ошибок, чтобы перехватить значения, которые не выбраны из списка, и я выключен и запущен!

Вот обновленный код:

  $(function()
  {
    var aEmps = 
    [
<?php
echo $sEmps;
?>    
    ];

    $("#slast").bind( "keydown", function( event ) {
      if ( event.keyCode === $.ui.keyCode.TAB &&
          $( this ).data( "autocomplete" ).menu.active ) 
          { event.preventDefault();}
    })
    .autocomplete({
      source: aEmps,
      close: function(event, ui)
      {
        alert(this.value);
      }      
    })
  });
0 голосов
/ 26 марта 2011

Глядя на документацию, похоже, что событие select сработало , поскольку выбор обновляется, а не после обновления выбора.Попробуйте использовать событие change вместо , выберите и посмотрите, решит ли это вашу проблему.

...