无法将自动完成选择的值推送到 JavaScript 中的全局数组

Cant push autocomplete selected value to global array in JavaScript

我正在处理一个自动完成用户列表的项目。

当我尝试将自动完成 selected 值推送到全局数组时,当我在自动完成功能之外执行 console.info(usernames) 时,我得到一个空列表。

var usernames=[];
$(document).ready(function(){
    $(function(){

     $( "#users" ).autocomplete({

   source: function( request, response ) {
    $.ajax({
      type: "GET",
      url: "getUserFromDb.php",
      dataType: "json",
      data: {
        term: request.term
      },
      success: function( data ) {
        response( data );
      }
    });
  },
  minLength: 2,
  select: function(event,ui){
    usernames.push(ui.item.value);
    }
});
console.info(usernames);
  });

    });

自动完成源返回正确的列表,select 也能正常工作,因为如果我在自动完成 select 中执行 console.info(usernames):当我 selecting 不同的值。

既然您需要 "answer",我们开始吧。首先,一旦 DOM 准备就绪,您的 console.info 就会有 运行,当您从自动完成中选择 select 选项时,显然是空的,因为稍后会推入用户名。其次,您不会在填充时重新记录 usernames。所以,你有两个选择。

1)在select函数内记录usernames,如:

select: function(event,ui) {
    usernames.push(ui.item.value);
    console.info(usernames);
}

2) 有一个函数可以为您完成这项工作,例如:

select: function(event,ui) {
    usernames.push(ui.item.value);
    showMeUserNames();
}

function showMeUserNames() {
    console.info(usernames);
}

所以,你的代码可能会变成:

var usernames=[];

$(function(){
    $( "#users" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                type: "GET",
                url: "getUserFromDb.php",
                dataType: "json",
                data: {
                    term: request.term
                },
                success: function( data ) {
                    response( data );
                }
            });
        },
        minLength: 2,
        select: function(event,ui) {
            usernames.push(ui.item.value);
            console.info(usernames);
            // OR
            // showMeUserNames();
        }
    });
});

function showMeUserNames() {
    console.info(usernames);
}