使用来自外部 JSON 的 JQuery 的自动完成表单字段不起作用

Posted

技术标签:

【中文标题】使用来自外部 JSON 的 JQuery 的自动完成表单字段不起作用【英文标题】:Autocomplete form field with JQuery from external JSON not working 【发布时间】:2021-01-19 14:33:28 【问题描述】:

我的复杂表单的第一步是使用位于 json 中的一些外部数据自动完成字段。我尝试并遵循了多个示例和文档,但我无法使其工作......

对于这个外部 json:

[
  
    "Nombre": "Adoración Pérez",
    "DNI": "23123",
    "Telefono": ""
  ,
  
    "Nombre": "Adriana Suárez",
    "DNI": "345345435",
    "Telefono": ""
  ,
  
    "Nombre": "Agueda Delmiro",
    "DNI": "6u56u6tJ",
    "Telefono": 12312434
  ,
  
    "Nombre": "Aida Aguilera",
    "DNI": "46456456A",
    "Telefono": 13123213
  ,
  
    "Nombre": "Aladino Valdés",
    "DNI": "67867845eG",
    "Telefono": ""
  ,
  
    "Nombre": "Alberto Martinez",
    "DNI": "235436456",
    "Telefono": ""
  
]

这是我的完整 JS:

$(function() 

    var entries = []

    $.getJSON('pacientes.json', function(json) 
        for (var key in json) 
            if (json.hasOwnProperty(key)) 
                var item = json[key];
                entries.push(item);
            
        

        console.log(entries)

        $("#species").autocomplete(
            minLength: 0,
            source: entries,
            focus: function(event, ui) 
                $("#species").val(ui.item.Nombre);
                return false;
            ,
            select: function(event, ui) 
                $("#species").val(ui.item.Nombre);
                $( "#identifiant" ).val( ui.item.DNI );

                return false;
            
        )
    );


);

这是我的完整 html

<!DOCTYPE html>
<html>
<body>

<h2>HTML Forms</h2>

<form action="/action_page.php">
  <label for="species">Species: </label>
  <input id="species">
  <label for="identifiant">Identifiant: </label>
  <input id="identifiant" style="width: 6em;">
</form> 

<p>If you click the "Submit" button, the form-data will be sent to a page called "/action_page.php".</p>

<script src="js/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="js/parse_data.js"></script>


</body>
</html>

我尝试了几个不同的选项,但无法自动完成数据。非常感谢!

【问题讨论】:

您是否使用工具来确定问题是 http 请求还是自动完成 api?浏览器控制台中是否有错误?如有错误请分享。如果有错误,请粘贴错误文本并包含与堆栈跟踪相关的代码。 控制台中没有显示错误... 您的条目与正确的格式不匹配。它必须包含具有标签和值属性的对象数组:[ label: "Choice1", value: "value1" , ... ] 【参考方案1】:

考虑以下示例。

$(function() 
  // Load entries once
  var entries = [];
  $.getJSON('pacientes.json', function(json) 
    $.each(function(key, val) 
      if (json.hasOwnProperty(key)) 
        entries.push(json);
      
    );

    // Initialize Autocomplete
    $("#species").autocomplete(
      minLength: 0,
      source: function(req, resp) 
        var myData = [];
        $.each(entries, function(key, val) 
          if (val.Nombre.indexOf(req.term) == 0) 
            myData.push(
              label: val.Nombre,
              value: val.DNI,
              Nombre: val.Nombre,
              DNI: val.DNI,
              Telefono: val.Telefono
            );
          
          console.log(myData);
          resp(myData);
        );
      ,
      focus: function(event, ui) 
        $("#species").val(ui.item.Nombre);
        return false;
      ,
      select: function(event, ui) 
        $("#species").val(ui.item.Nombre);
        $("#identifiant").val(ui.item.DNI);
        return false;
      
    );
  );
);
<h2>HTML Forms</h2>

<form action="/action_page.php">
  <label for="species">Species: </label>
  <input id="species" type="text" />
  <label for="identifiant">Identifiant: </label>
  <input id="identifiant" type="text" style="width: 6em;" />
</form>

<p>If you click the "Submit" button, the form-data will be sent to a page called "/action_page.php".</p>

<script src="js/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="js/parse_data.js"></script>

这将允许您配置自定义数据并仍然根据需要格式化数组。

参考:https://api.jqueryui.com/autocomplete/#option-source

您也可以使用$.ui.autocomplete.filter()

var myData = [];
$.each(entries, function(key, val) 
  myData.push(
    label: val.Nombre,
    value: val.DNI,
    Nombre: val.Nombre,
    DNI: val.DNI,
    Telefono: val.Telefono
  );
  console.log(myData);
  resp($.ui.autocomplete.filter(myData, req.term));
);

【讨论】:

以上是关于使用来自外部 JSON 的 JQuery 的自动完成表单字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章

来自 Json 的 Jquery 自动完成值

Jquery自动完成不过滤来自django的JSON数据

使用来自 URL 的 JSON 的 jQuery UI 自动完成

使用 JSON 自动完成 Jquery UI

自动完成 Jquery Json

使用 JSON 的 Rails Jquery 自动完成失败