【问题标题】:How would I trim the input to a JQuery auto-complete box?我将如何修剪 JQuery 自动完成框的输入?
【发布时间】:2010-07-22 09:43:28
【问题描述】:

在与名称列表匹配之前,有没有办法修剪(删除前导/尾随空格)用户输入的输入到 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 映射中的名称匹配,但后面有空格,则不会匹配,因此不会为输入分配任何值。如果可能的话,我希望在此映射中至少忽略尾随空格(如果不是前导空格)。

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

编辑:

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

【问题讨论】:

    标签: php javascript jquery html jquery-autocomplete


    【解决方案1】:

    您可以在source 函数中找到自己,而不是使用the built-in function,如下所示:

    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 );
      }));
    }
    

    You can try a demo here。这使用 $.trim() 在将搜索词传递到 $.grep() 之前修剪搜索词,以获得您想要的前导/尾随空白无知效果。


    对于您的编辑,您可以这样做,但“无结果...”将是可选的,give it a try here

    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: '' }]);
    }
    

    【讨论】:

    • 非常感谢尼克,这就像一个魅力!我遇到的唯一问题是我需要用 jQuery 替换“$” - 起初我没有发现“jQuery”丢失并且花了很长时间试图思考可能导致它无法工作的复杂原因最后!
    • 对不起,如果这看起来有点粗鲁,但只是想检查一下 - 是否绝对没有办法使“未找到结果”选项无法选择,或者您只是不知道任何其他方法是吗?
    【解决方案2】:

    使用jQuery.trim:

    jQuery.trim(yourValue);
    

    【讨论】:

    • 对不起,我认为我的问题不够清楚(稍后将对其进行编辑)-我将在哪里修剪数据以确保在 jQuery 尝试匹配之前修剪数据映射列表?抱歉,以上内容主要取自网络上的一个示例——之前从未使用过 jQuery!
    • @Stephen,您使用的是哪个自动完成插件?
    • 据我所知,我们使用的是this one。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多