Javascript 如何在用户打字时延迟按键功能,以避免';每次击键都不会发出请求吗?
背景 我在一个页面上有许多下拉列表。如果更改第一个下拉列表,其余下拉列表将根据所选内容进行更新 在我们的例子中,我们处理基金数据。因此,第一个下拉列表是“所有基金类型”。您选择“对冲基金”,下一个下拉列表将通过仅适用于对冲基金的选项进行过滤 客户现在要求我在混合中加入一个文本字段,当用户开始键入时,它将影响这些结果 因此,如果他们键入“USD”,第二个下拉列表将只包含名称中带有“USD”的基金的期权 问题 我遇到的具体问题是,我使用的代码:Javascript 如何在用户打字时延迟按键功能,以避免';每次击键都不会发出请求吗?,javascript,jquery,ajax,Javascript,Jquery,Ajax,背景 我在一个页面上有许多下拉列表。如果更改第一个下拉列表,其余下拉列表将根据所选内容进行更新 在我们的例子中,我们处理基金数据。因此,第一个下拉列表是“所有基金类型”。您选择“对冲基金”,下一个下拉列表将通过仅适用于对冲基金的选项进行过滤 客户现在要求我在混合中加入一个文本字段,当用户开始键入时,它将影响这些结果 因此,如果他们键入“USD”,第二个下拉列表将只包含名称中带有“USD”的基金的期权 问题 我遇到的具体问题是,我使用的代码: $('#Search').keypress(funct
$('#Search').keypress(function () {
// trigger the updating process
});
它会触发对每个按键的搜索。因此,当我输入“USD”时,我立即收到3个请求——一个是“U”,一个是“US”,一个是“USD”
我已尝试使用以下设置超时:
$('#Search').keypress(function () {
// I figure 2 seconds is enough to type something meaningful
setTimeout(getFilteredResultCount(), 2000);
});
但所有这些都需要等待2秒钟才能完成我所描述的
我相信这个问题以前已经解决了。有人能建议如何解决这个问题吗 我以前这样做的方法是设置超时,但每次按下新键时都会清除现有超时。这样,您应该只在用户停止键入时收到发送的请求
(我会暂停500毫秒左右。)+1感谢你在这方面击败了我。我正要建议OP在新事件上清除他的
setTimeout
。。我仍在提交3份美国科学与发展部的申请。我会仔细看看,看看我是否能做些什么。如果你每次按键间隔超过500毫秒,你会收到3份申请。但是你知道,对吧?@Dave:这里的问题是setTimeout(getFilteredResultCount(),500)代码>立即执行该函数。不传递字符串,只传递函数本身:setTimeout(getFilteredResultCount,500)
(没有()
)(我知道我上面说过同样的话,但我也想@Tim知道)。仅供参考,如果需要传递参数,可以将函数调用包装到另一个函数中,如下所示:setTimeout(function(){getFilteredResultCount(someParameterOfMine)},500)
是否确实要将getFilteredResultCount
的返回值传递给setTimeout
而不是函数本身?所需的是事件去抖动。这看起来很有趣,但在星期五的这个时候&这么多的文字-要等到星期一!!:-)关于getFilteredResultCount
的返回值,有一点很好。幸运的是,我不需要它来返回任何东西,但是记住它很好,所以您可能需要setTimeout(getFilteredResultCount,2000)代码>。如果添加括号,则立即调用该函数。
var timeoutId = 0;
$('#Search').keypress(function () {
clearTimeout(timeoutId); // doesn't matter if it's 0
timeoutId = setTimeout(getFilteredResultCount, 500);
// Note: when passing a function to setTimeout, just pass the function name.
// If you call the function, like: getFilteredResultCount(), it will execute immediately.
});