使用 autocomplete.js 中的值的 id 填充隐藏的输入

Posted

技术标签:

【中文标题】使用 autocomplete.js 中的值的 id 填充隐藏的输入【英文标题】:populate input hidden with the id of a value from autocomplete.js 【发布时间】:2016-06-04 21:33:59 【问题描述】:

我现在正在做的是当我输入一个人的名字时自动完成。我需要的是当我选择名字时自动用那个人的 id 填充一个隐藏字段。

我的代码:

<form action="cadastroAdm.php" method="post" name="clientForm">
      <input type="text" name="clienteId" id="clienteId">   
      <input type="text" name="clienteNome" id="clientes"> 
</form>

jquery

$(document).ready(function() 
// Captura o retorno do retornaCliente.php
    $.getJSON('php/retornar_cliente.php', function(data)
    var dados = [];

    // Armazena na array capturando somente o nome do EC
    $(data).each(function(key, value) 
        dados.push(value.clienteNome);  
        );

        $('#clientes').autocomplete(
        source: dados,
        minLength: 3,   

          select: function(event, ui) 

            $('#clienteId').val(ui.item.id);
            console.log(ui.item.id);                
          ,

            );
        );
);  

retornar_cliente.php

<?php
$hostname = "";
$user = "";
$pass = "";
$basedados = "";
$pdo = new PDO("mysql:host=localhost; dbname=adv; charset=utf8;",'root','');
$dados = $pdo->prepare("SELECT clienteNome, clienteId FROM cliente ORDER BY clienteNome");
$dados->execute();
echo json_encode($dados->fetchAll(PDO::FETCH_ASSOC));
?>

在控制台日志中我只收到“未定义”.. 我做错了什么?

【问题讨论】:

console.log(ui);看看这个。 然后,$('#clienteId').val(ui.clienteId); 你只是将clientName而不是id推到dados array,这是autocomplete.push clienteId到array的来源。应该可以解决问题 如何连接它?还是推2次? 【参考方案1】:

只需用这个更改您的查询:

"SELECT clienteNome, clienteId as id FROM cliente ORDER BY clienteNome"

或者用这个改变你在JS中的变量:

ui.item.clienteId

编辑:

您没有将 id 推送到您的 dados 数组中。

请参考此链接:http://jqueryui.com/autocomplete/#remote

【讨论】:

仍然“未定义”:( 你改变了什么? 另外,您没有在 dados 数组中推送 id。请查看此内容,并参考上面我提供的链接,以便对远程数据使用自动完成功能。 我正在尝试将 id 也推送到数组,但我不知道如何将其转换为关联数组。我需要修复我的 php 语句?或者可以在jquery中做到吗?你能帮帮我吗? 这就是我提供链接的原因。使用起来很简单。【参考方案2】:

问题解决了..按照我使用的代码:

retornar_cliente.php

<?php require_once("conexao/conexao.php"); ?>
<?php
$term = trim(strip_tags($_GET['term']));//retrieve the search term that autocomplete sends

$qstring = "SELECT clienteNome as value,clienteId as id FROM cliente WHERE clienteNome LIKE '%".$term."%'";

 $consulta_tr = mysqli_query($conecta, $qstring);
    if(!$consulta_tr) 
        die("erro no banco1");
    

while ($row = mysqli_fetch_array($consulta_tr,MYSQL_ASSOC))//loop through the retrieved values

        $row['value']=htmlentities(stripslashes($row['value']));
        $row['id']=(int)$row['id'];
        $row_set[] = $row;//build an array

echo json_encode($row_set);//format the array into json data
?>

html

<form action="cadastroAdm.php" method="post" name="clientForm">
      <input type="text" name="clienteId" id="clienteId">   
      <input type="text" name="clienteNome" id="clientes"> 
</form>

jquery

$(document).ready(function() 

        $('#clientes').autocomplete(
        source: 'php/retornar_cliente.php',
        minLength: 3,   

          select: function(event, ui) 

            $('#clienteId').val(ui.item.id);            
                 ,
            );     
        );

【讨论】:

以上是关于使用 autocomplete.js 中的值的 id 填充隐藏的输入的主要内容,如果未能解决你的问题,请参考以下文章

怎么做百度搜索的下拉框?

将 __m256i 设置为两个 __m128i 值的值

将 __m256i 设置为两个 __m128i 值的值

把一个ArrayList中的值,存储到一个HashMap中

反转 __m512i 寄存器中的值

如何实现两个数组之间值的替换