Как мне обрезать ввод в поле автозаполнения JQuery?

Есть ли способ обрезать (удалить начальные/конечные пробелы) ввод, введенный пользователем в текстовое поле автозаполнения 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, но с пробелами после него, оно не будет совпадать, и поэтому вводу не будет присвоено значение. Я хотел бы, чтобы в этом отображении, по возможности, игнорировались конечные пробелы (если не ведущие пробелы).

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

ИЗМЕНИТЬ:

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


person Stephen    schedule 22.07.2010    source источник


Ответы (2)


Вы можете найти себя в функции 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: '' }]);
}
person Nick Craver    schedule 22.07.2010
comment
Большое спасибо, Ник, это работает как шарм! Единственная проблема, с которой я столкнулся, заключалась в том, что мне нужно было заменить $s на jQuery - я сначала не заметил, что jQuery отсутствует, и потратил слишком много времени, пытаясь придумать сложные причины, которые могут привести к тому, что он не работает с моей стороны! - person Stephen; 22.07.2010
comment
Извините, если это кажется немного грубым, но я просто хотел проверить - определенно ли нет способа сделать выбор «Результат не найден» невыбираемым, или вы просто не знаете другого способа сделать это? - person Stephen; 22.07.2010

Используйте jQuery.trim:

jQuery.trim(yourValue);
person James    schedule 22.07.2010
comment
Извините, я думаю, что недостаточно ясно выразился в своем вопросе (отредактирую его через минуту) - где именно мне обрезать данные, чтобы убедиться, что они обрезаны до того, как jQuery попытается сопоставить их со списком сопоставления? Мои извинения, но приведенное выше было взято в основном из примера в Интернете - никогда раньше не использовал jQuery! - person Stephen; 22.07.2010
comment
@Stephen, какой плагин автозаполнения вы используете? - person James; 22.07.2010
comment
Насколько мне известно, мы используем это. Спасибо. - person Stephen; 22.07.2010