javascript - 为什么这个jquery自动完成脚本不关心匹配?

标签 javascript php jquery

我正在尝试让这个脚本运行几个小时。我已经完成了其中的一部分,但脚本没有处理匹配。

因此,当我开始输入内容时,它会显示数据库中的所有数据,即使它们不匹配。如果我的数据库有 3 条记录,我会查看所有记录,不管我写的是什么。

这是我的记录:

Idoya idoya@xxxx.com 123 Livingston Road xxxxxxx, XX YYYYY
Gideon gideon@xxxx.com 123 Wild Rose St. xxxxxxx, XX YYYYY 
Collin collin@xxx.com 123 Inverness Street xxxxxx, XX YYYYY

我的脚本:

$(document).ready(function(){

    $('#name').autocomplete({
        source: function(data, cb){
            $.ajax({
                url: 'index.php/PersonData/get_people',
                method: 'GET',
                dataType: 'json',
                data: {
                    name:data.term
                },
                success: function(res){
                    //cb(res);

                    var d = $.map(res, function(row){
                        return {
                            label: row.name + " " + row.mail,
                            value: row.name,
                            mail: row.mail,
                            address: row.address
                        }
                    });

                    cb(d);
                }
            });
        },
        select: function(event, ui) {
            $(this).val(ui.item.value)
            $('#mail').val(ui.item.mail)
            $('#address').val(ui.item.address);
        }
    });


});

我希望它像我开始写“Ido”时那样工作,它应该显示带有“Idoya Vinay”的一条记录。

最佳答案

收到 php 文件的响应后,您需要过滤结果。您可以引用下面的代码来做到这一点。请随意根据您的需要进行必要的更改。

$('#autocomplete').autocomplete({
  source: function(data, cb) {
    $.ajax({
      url: 'https://jsonplaceholder.typicode.com/users',
      method: 'GET',
      dataType: 'json',
      data: {
        // name:data.term
      },
      success: function(res) {
        //cb(res);

        var d = $.map(res, function(row) {
          return {
            label: row.name,
            value: row.name,
            name: row.name,
            email: row.email,
            website: row.website
          }
        });

        // to filter between items returned from $.map
        var filtered = d.filter(function(entry) {
          return entry.name.indexOf(data.term) > -1;
        })

        cb(filtered);
      }
    });
  },
  select: function(event, ui) {
    $(this).val(ui.item.value)
    $('#email').val(ui.item.email)
    $('#website').val(ui.item.website);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" integrity="sha256-rByPlHULObEjJ6XQxW/flG2r+22R5dKiAoef+aXWfik=" crossorigin="anonymous" />

<input id="autocomplete" type="text" placeholder="search name">
<hr>
<input type="text" id="email" placeholder="email">
<input type="text" id="website" placeholder="website">

关于javascript - 为什么这个jquery自动完成脚本不关心匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160923/

相关文章:

javascript - AngularJS ng-repeat with separator every two items

javascript - 使用 Sequelize 破坏模型的麻烦

javascript - 如何自动选择旋转木马中的单选按钮

php - Magento,如何调用主题文件中的产品属性?

php没有使用jquery发送数据

jQuery CORS 删除失败

javascript - 仅当通过该查询字符串访问时才保留 URL 上的查询字符串

javascript - PHP和JS中的重定向而不刷新页面

php - 如何使 PHP 正确转义 CSV (fgetcsv)?

javascript - 返回并使用 JavaScript 重新提交表单