如果jquery autocomplete为空,则删除输入字段中的最后一个char

时间:2018-03-01 18:20:54

标签: javascript jquery

我使用jquery自动完成功能从文本类型输入中的数据库中提取数据。

如果查询在前2个字符后没有返回任何数据,我设法自动删除了最后一个字符。但是如何在删除字符后重新运行查询?

这是我的剧本:

<script type="text/javascript">
    $(function() {
        $("#field").autocomplete({
            source: function(request, response) {  
                $.ajax({
                    method: "GET",
                    dataType: "json",
                    url: "<?php echo URL; ?>/librerie/autocomplete.php",
                    data: { what: "type", term: request.term},
                    success: function(data) {
                        response(data);
                    },
                    error: function() {
                        response([]);
                    }
                 })
                 .then( function(response) {
                     if (response == "") {
                         $("#field").val( function(index, value) {
                             return value.substr(0, value.length - 1);
                         })
                     }
                 });
             },
             delay: 500,
             minLength: 2
         });
     });
 </script>

1 个答案:

答案 0 :(得分:0)

您需要将整个自动完成调用封装到自动执行的命名函数中。然后,您可以在需要时以递归方式调用函数。

$(function () {
  (function doAutoComplete(){

    $("#field").autocomplete({
      source: function (request, response) {
        $.ajax({
          method: "GET",
          dataType: "json",
          url: "<?php echo URL; ?>/librerie/autocomplete.php",
          data: { what: "type", term: request.term },
          success: function (data) {
            response(data);
          },
          error: function () {
            response([]);
          }
        }).then(function (response) {
            if (response === "") {
              $("#field").val($("#field").val().substr(0, value.length - 1));
              doAutoComplete();  // Call function recursively again
            }
          });
      },
      delay: 500,
      minLength: 2
    });
  })(); // Automatically invoke function
});