2

<input>在与名称列表匹配之前,有什么方法可以修剪(删除前导/尾随空格)用户输入到 jQuery 自动完成文本框中的输入:值?我目前有一个文本框,用户可以在其中输入姓名。然后通过 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地图中的名称匹配,但后面有空格,则不会匹配,因此不会为输入分配任何值。如果可能的话,我希望至少在此映射中忽略尾随空格(如果不是前导空格)。

另外,如果没有找到地图,是否可以为输入框添加默认值?

编辑:

顺便说一句,如果用户键入的内容不匹配,是否可以在下拉自动完成框中显示不匹配的条目?为问题后的编辑道歉。

4

2 回答 2

5

您可以在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: '' }]);
}
于 2010-07-22T10:57:55.603 回答
1

使用jQuery.trim

jQuery.trim(yourValue);
于 2010-07-22T09:45:45.870 回答