我有以下代码块,它使用jQuery将id为searchBox的文本输入的内容发送到服务器.

$(document).ready(function () {    
  $('#searchBox').on('input', function () {
    var searchContent = $(this).val()


    if (searchContent.length == 0) {
      // other not relevant code
    }
    else {    
   

        $.post('/checkAvailability',
          { domainName: searchContent },
          function (data, status, jqXHR) {
            console.log(status + ' ' + data);
          });

    }
  });
});

如果搜索内容在3秒内没有更改,我如何才能调用$.post函数?

推荐答案

在不使用其他实现(如lodash.throttlelodash.debounce)的情况下,可以使用setTimeoutclearTimeout.

(我注释掉了对$.post的调用,只是在演示中使用了console.log()调用)

$(document).ready(function() {
  let run;

  $("#searchBox").on("input", function() {
    const searchContent = $(this).val();
    clearTimeout(run);

    if (searchContent.length == 0) {
      // other not relevant code
    } else {
      run = setTimeout(() => {
        console.log(searchContent);
        /* $.post(
          "/checkAvailability", {
            domainName: searchContent
          },
          function(data, status, jqXHR) {
            console.log(status + " " + data);
          }
        ); */
      }, 3000);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="searchBox" />

Jquery相关问答推荐

:eq Jquery,我似乎无法显示第一个之后的元素

如何在jQuery中判断粘贴剪贴板中字母输入的增加/减少

递归循环遍历对象(树)

$.each() 与 for() 循环 - 和性能

.slice(0) 在这里有什么意义?

jQuery 中的 $this 与 $(this)

对混合的字母/数字数组进行排序

按百分比zoom div的内容?

Angular.js 在多个元素中重复

如何使所有浏览器都支持 ?有什么 Select 吗?

使用 jquery/ajax 刷新/重新加载 Div 中的内容

使用 jQuery 获取选定的选项 id

jQuery ajax (jsonp) 忽略超时并且不触发错误事件

使用 AJAX 加载 Bootstrap 弹出内容.这可能吗?

使用 jQuery 获取选中复选框的值

如何使锚链接不可点击或禁用?

使用 moment.js 将日期转换为字符串MM/dd/yyyy

如何判断值是否为 JSON 对象?

为什么我应该创建异步 WebAPI 操作而不是同步操作?

jQuery append() 与 appendChild()