javascript - 带无限滚动的 Jquery UI 自动完成

标签 javascript php jquery jquery-ui

我正在尝试在我的自动完成文本框中滚动加载更多数据 当用户向下滚动时,它的功能类似于 分页根据需要加载更多结果。

类似于 this .

我已经找了好久了 很难找到与我类似的问题。

       <div class="ui-widget">
              <label for="tags">Enter Company Name: </label>
              <input id="tags" class="form-control">
            </div>

    <script> 
 $( function() {
        $( "#tags" ).autocomplete({
            source: 'function/all_company_auto.php'
        });
      } );
</script>

这是我的 php 代码。

<?php
$get_company = "SELECT DISTINCT companies.company
        FROM companies
        INNER JOIN target_details
        ON companies.company_id = target_details.company_id
        WHERE companies.company LIKE \"%$company%\"
        LIMIT 100 OFFSET 10
        ";
        if($run_company = $conn->query($get_company)){
            while($row = $run_company->fetch_assoc()){
                $data[] = $row['company'];
            }
             echo json_encode($data);
        }
?>

最佳答案

首先,您的 PHP 需要能够收集一定数量的结果。

这可能看起来像这样:

<?php
$start = isset($_POST['o']) ? int($_POST['o']) : 0;  // Offset
$count = isset($_POST['l']) ? int($_POST['l']) : 100; // Limit
$company = $conn->real_escape_string($_POST['term']); // Search Term, protected from SQL Injection

$get_company = "SELECT DISTINCT companies.company
  FROM companies
  INNER JOIN target_details
  ON companies.company_id = target_details.company_id
  WHERE companies.company LIKE \"%$company%\"
  LIMIT $count OFFSET $start";
if($run_company = $conn->query($get_company)){
    while($row = $run_company->fetch_assoc()){
        $data[] = $row['company'];
    }
    echo json_encode($data);
}
?>

所以现在当我们请求更多数据时,我们可以发送 { o: 10, l: 100, term: "app"} 例如。从您给出的示例中提取,它可能看起来有点像这样:

_scrollMenu: function(ul, items) {
  var self = this;
  var startShow = 10;
  var maxShow = 100;
  var results = [];
  var pages = Math.ceil(items.length / maxShow);
  $.ajax({
    url: "function/all_company_auto.php",
    type: "POST",
    data: {
      o: startShow,
      l: maxShow,
      term: self.request.term
    },
    dataType: "json",
    sucess: function(data);
    $.each(data, function(k, v) {
      results.push(v);
    });
  });
  //results = items.slice(startShow, maxShow);

  if (pages > 1) {
    $(ul).scroll(function() {
      if (isScrollbarBottom($(ul))) {
        ++window.pageIndex;
        if (window.pageIndex >= pages) return;

        results = items.slice(window.pageIndex * maxShow, window.pageIndex * maxShow + maxShow);

        //append item to ul
        $.each(results, function(index, item) {
          self._renderItem(ul, item);
        });
        //refresh menu
        self.menu.deactivate();
        self.menu.refresh();
        // size and position menu
        ul.show();
        self._resizeMenu();
        ul.position($.extend({
          of: self.element
        }, self.options.position));
        if (self.options.autoFocus) {
          self.menu.next(new $.Event("mouseover"));
        }
      }
    });
  }

  $.each(results, function(index, item) {
    self._renderItem(ul, item);
  });
}

这个例子的问题是元素的数量是已知的。您将不得不进行初步查询以收集所有可能的结果。所以这将开始分崩离析。这也不是自动完成的最佳用途。

如果你能说清楚为什么要得到这么多结果而不是限制它,那就更好了。

关于javascript - 带无限滚动的 Jquery UI 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190802/

相关文章:

javaScript 幻灯片无法正常工作

jquery - 使用 JQuery 的 CSS3 动画触发器点击其他元素

javascript - ".filter"是否可以检查目标是否具有多个属性?

javascript - json 和 Utc 日期时间

php - 在搜索中突出显示多个关键字

PHP Sockets 未在 Centos 5 上加载

jquery - 如何动态添加和删除要由 Parsley.js 验证的表单字段?

Javascript 缩略图弹出窗口

php - jQuery 根据表行传递输入值

php - 在 PHP 中为同一网站的不同页面生成多个 session ID