Как бы я обрезал ввод в поле автозаполнения JQuery? - PullRequest
2 голосов
/ 22 июля 2010

Есть ли способ обрезать (удалить начальные / конечные пробелы) ввод, введенный пользователем, в поле автозаполнения текста jQuery <input>, прежде чем оно сопоставляется со списком имен: значений? В настоящее время у меня есть текстовое поле, в котором пользователи должны вводить имена. Затем имена сопоставляются со списком пар имя: значение с помощью jQuery:

<script type="text/javascript">

var resources = [
               <?php 
                    foreach($data['Resource'] as &$row){
                        $Name = $row['Forename']." ".$row['Surname'];  
                        echo "{";
                        echo "  label:'$Name',";
                        echo "  value:'$row[EmployeeNumber]'";
                        echo "},";
                    }
                 ?>
                ];

    jQuery(function(){
        jQuery('#Resource').autocomplete({
            source: resources,
            focus: function(event, ui) {
                jQuery('#Resource').val(ui.item.label);
                return false;
            },          
            select: function(event, ui) {
                jQuery('#Resource').val(ui.item.label);
                jQuery('#EmployeeNumber').val(ui.item.value);
                return false;
            }
        });
    }); 
</script>

Моя проблема в том, что если пользователь вводит имя, которое совпадает с именем на карте resources, но с пробелами после него, оно не будет сопоставлено и, следовательно, никакое значение не будет назначено для ввода. Я хотел бы, чтобы по крайней мере завершающие пробелы (если не ведущие пробелы) игнорировались в этом отображении, если это возможно.

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

EDIT:

Кроме того, возможно ли, чтобы в раскрывающемся поле автозаполнения отображалась запись о несоответствии, если пользователь вводит что-то, что не соответствует? Извиняюсь за редактирование после вопроса.

Ответы [ 2 ]

5 голосов
/ 22 июля 2010

Вы можете найти себя в функции source вместо использования встроенной функции , например:

source: function( request, response ) {
  var matcher = new RegExp($.trim(request.term).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i" );
  response($.grep(resources, function(value) {
    return matcher.test( value.label || value.value || value );
  }));
}

Вы можете попробоватьдемо здесь .При этом используется $.trim(), чтобы урезать поисковый термин, прежде чем он будет передан в $.grep(), чтобы получить желаемый эффект начального / конечного пробела.


Для редактирования вы можете сделать это, но можно выбрать «Нет результата ...», попробовать здесь :

source: function( request, response ) {
  var matcher = new RegExp($.trim(request.term).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i" );
  var matches = $.grep(resources, function(value) {
    return matcher.test( value.label || value.value || value );
  });
  response(matches.length ? matches : [{ label: 'No Result Found', value: '' }]);
}
1 голос
/ 22 июля 2010

Использование jQuery.trim:

jQuery.trim(yourValue);
...