事件通过持续去抖(不去抖)

时间:2015-03-13 00:35:55

标签: ruby-on-rails coffeescript underscore.js asset-pipeline turbolinks

以下是代码:

lookup_book = (obj) ->
  $.get '/list_items/retrieve_google_book/' + obj.val() + '/' + obj.attr("id")
  return

delayed_lookup = (obj) ->
  _.debounce(lookup_book(obj), 3000)
  return

$(document).on 'keyup', '.list-item-title', (event) ->
  delayed_lookup($(this))
  return

我想要lookup_book,因此只有在用户没有键入3000ms时才会触发ajax请求。现在,当我在输入字段中键入字母时,它会触发,没有任何延迟。

这里发生了什么?我把头发拉出来。

2 个答案:

答案 0 :(得分:1)

不是将函数传递给_.debounce,而是每次“&key”注释时调用函数lookup_book。事件被触发。

所以_.debounce返回一个新函数供你调用。

delayed_lookup = _.debounce(lookup_book, 3000)

$(document).on 'keyup', '.list-item-title', (event) ->
  delayed_lookup($(this))
  return

答案 1 :(得分:0)

我最终使用自定义的debounce实现,因为我无法使上述功能得以实现。

delay = do ->
  timer = 0
  (callback, ms) ->
    clearTimeout timer
    timer = setTimeout(callback, ms)
    return

$(document).on 'keyup', '.list-item-title', (event) ->
  val = $(this).val()
  id = $(this).attr("id")
  delay (->
    $.get '/list_items/retrieve_google_book/' + val + '/' + id
    return
  ), 2000
  return