以下是代码:
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请求。现在,当我在输入字段中键入字母时,它会触发,没有任何延迟。
这里发生了什么?我把头发拉出来。
答案 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