jQuery 自动完成 KEYUP vs KEYPRESS vs KEYDOWN

Posted

技术标签:

【中文标题】jQuery 自动完成 KEYUP vs KEYPRESS vs KEYDOWN【英文标题】:jQuery Autocomplete KEYUP vs KEYPRESS vs KEYDOWN 【发布时间】:2019-02-19 14:34:52 【问题描述】:

我有一个大约 300,000 条记录的大型数据集,除此之外,除了在搜索框中输入的内容之外,我几乎没有什么可以添加到查询中来减少它。

keyup 与 keydown 的差异在 10 个水果或数百个国家/地区的数组中并不明显,但在处理 300,000 多条记录时差异巨大,您需要第一次击键才能取消一些选择。

为了说明

// on FIRST keydown field value is blank as expected, 
// (value is present on keyup)

$('#autoCompleteField').keypress(function()
  var formVal=$('#autoCompleteField').val();
);

// assume ive made it safely to my php form
// $formVal = jquery value shown above
// translates to query below

select('id','name') from myTable where name like '%%'

拉出 10 种水果或几百个国家的列表会很好,就像在他们的演示中所做的那样,没有任何后果,但对于拥有 300,000 多条记录的毫无戒心的人来说,这似乎是一个很大的疏忽。

你有什么理由不应该使用 keyup 吗?

【问题讨论】:

如果您对 300K 记录进行自动完成,那么您做错了。不会有人想到电子吗?!?!?!?! 如果一个人想要一个可以处理它的功能,你会用什么? A.) 你在征求意见,而不是坚如磐石的答案。 “我错了吗?” B.) 你必须考虑到你的用户。请给我们一个需要 300K 选择的用例。 没有条件的查询有300,000。 FIRST keydown 发送一个不添加任何条件的查询,因为此时它是一个空白的未触及字段,有效地询问所有内容。我的问题是......我已经通过使用 keyup 而不是 keypress/keydown 解决了它,我想知道为什么插件本身没有将它作为默认设置。这种方法有什么问题吗? 【参考方案1】:

我已经构建了自己的自动完成任务,该任务以曲速处理 300,000 多条记录。关键是每次按键只返回有限数量的记录,在我的例子中,我使用了 10 个。这是我雄辩的查询。

$first3 & $last3 是我自己的变量,插入你自己的逻辑。

     $queries=largeData::select('FirstName','LastName')
     ->where('FirstName','like','%'.$first3.'%')
     ->where('LastName','like','%'.$last3.'%')
     ->take(10)
     ->get();

这不适用于我尝试过的 jquery 插件。无论我的搜索词是什么,它都会提供前 10 个按字母顺序排列的记录,并且在第二次击键时,它只会使用选择的那 10 个作为其搜索池,从而导致没有记录。

对于 jQuery

$('#myAutoSearchBox').keyup(function()

  var formVal=$('#myAutoSearchBox').val();
  var formVal=formVal.trim();
  var theURL='/getMyRecord'+formVal;

  if(formVal)
     ajaxGet_myAutoComplete(theURL);
     $('.rosterResults').show();
  else
     $('.rosterResults').hide();
  

);

最后,ajax 成功函数将我的 html 推送到我的 rosterResults div。

function ajaxGet_myAutoComplete(theURL)
   $.ajax(
     url: theURL,
     type: "GET",
     dataType: "html",

     success: function(response)
        $(".rosterResults").html(response);
     
  );

对于了解一点 jquery 和 ajax 的人来说,这可能看起来超级简单,但对于那些不了解的人来说,这是我在其他任何地方都没有找到对我有帮助的解决方案。

【讨论】:

以上是关于jQuery 自动完成 KEYUP vs KEYPRESS vs KEYDOWN的主要内容,如果未能解决你的问题,请参考以下文章

Jquery UI自动完成列表不刷新

如何将 jquery ui 自动完成添加到动态创建的元素?

自动填充侦听器和 keyup 触发器上的 JQuery 语法错误,同时循环并查找顺序命名的输入

jQuery sum on change keyup() 并在文本框中输出

搜索自动提示的简单模拟JQuery

在 jQuery 中触发 keyup() 之前添加延迟