【发布时间】:2016-09-12 18:04:09
【问题描述】:
当用户搜索姓氏时,响应是跳跃的。
这就是正在发生的事情。我的示例是搜索名称 Moon。
因为 Moon 是最具体的,所以它运行最快的搜索(例如 15.08) http://localhost:3000/contacts/search_contacts?search_term=Moon&order_by=first_name&sort_direction=asc&grade=all&group=allhttp://localhost:3000/contacts/search_contacts?
因为 M 是最不具体的,所以它运行最慢的搜索(例如 22.47) search_term=M&order_by=first_name&sort_direction=asc&grade=all&group=all http://localhost:3000/contacts/search_contacts?
Mo & Moo 也会跑。
因此,搜索找到了 Moon,但随后被“Moo”、“Mo”和“M”的搜索结果覆盖(并导致跳转和搜索无法正常工作)。
这里是代码(使用coffeescript)。
class @ContactsSearch
constructor: ->
SearchUtils.configCheckBoxSelectAll('contacts-checkbox-select-all', 'contacts-container','contacts-delete-button')
SearchUtils.configBtnGroup('contacts-btn-group-grade', doSearch)
SearchUtils.configBtnGroup('contacts-btn-group-order-by', doSearch)
SearchUtils.configBtnGroup('contact-btn-group', doSearch)
SearchUtils.configSortDirBtn('contacts-sort-order-toggle', doSearch)
configDeleteButton()
configAjaxPaginationLinks()
search_box = $('#contacts-search-input')
search_box.data('search-url')
search_box.bind 'input', (e, data) ->
doSearch()
doSearch = ->
search_box = $('#contacts-search-input')
btn_group_grade = $('#contacts-btn-group-grade')
btn_group_order_by = $('#contacts-btn-group-order-by')
sort_order_toggle = $('#contacts-sort-order-toggle')
contact_btn_group = $('#contact-btn-group')
SearchUtils.resetMasterCheckbox('contacts-checkbox-select-all', 'contacts-delete-button')
ajaxCall(search_box.data('search-url') + "?search_term=" + search_box.val() + "&order_by=" + btn_group_order_by.data('value') + "&sort_direction=" + sort_order_toggle.data('value') + "&grade=" + btn_group_grade.data('value') + "&group=" + contact_btn_group.data('value'))
ajaxCall = (finalUrl) ->
search_box = $('#contacts-search-input')
contacts_table = $('#contacts-container')
$.ajax
url: finalUrl
type: "GET"
error: (data, status, xhr) ->
# do nothing
success: (data, status, xhr) =>
contacts_table.html(data)
configAjaxPaginationLinks()
$('[data-toggle="popover"]').popover()
SearchUtils.configContainerCheckBoxs('contacts-checkbox-select-all', 'contacts-container','contacts-delete-button')
configDeleteButton = ->
$("#contacts-delete-button").click (event) ->
event.preventDefault()
bootbox.confirm "Are you sure?", (result) ->
if result
deleteSelectedContacts()
configAjaxPaginationLinks = ->
$('#contacts-container').find(".pagination a").click (event) ->
event.preventDefault()
search_box = $('#contacts-search-input')
finalUrl = search_box.data('search-url') + "?" + $(this).attr("href").split("?").slice(1)
ajaxCall(finalUrl)
deleteSelectedContacts = ->
url = $("#contacts-delete-button").data('url')
deleteIDs = $(".contact-search-item:checked").map(->
$(this).val()
).get()
$.ajax
url: url
type: "POST"
data: JSON.stringify({ ids: deleteIDs }),
contentType: "application/json; charset=utf-8",
dataType: "json"
error: (data, status, xhr) ->
# do nothing
success: (data, status, xhr) =>
doSearch()
document.addEventListener "turbolinks:load", ->
new ContactsSearch()
我是 coffeescript 的新手,但我认为我需要改变逻辑。具体来说,我认为我需要为此添加一个时间延迟:
search_box.bind 'input', (e, data) ->
doSearch()
我尝试将“input”更改为“keyup”,以便在手指离开键盘时进行搜索,但这不起作用。不确定语法是否错误,或者这不是咖啡脚本约定。
或者,我认为我需要在 cofeescript 上添加某种时间延迟,但不确定语法?
有什么想法吗?
非常感谢。
【问题讨论】:
-
好的,所以我遇到了建议使用 debounce ... *.com/questions/14000395/… 的堆栈溢出,但不确定在哪里/如何添加到我的代码中?
标签: javascript ruby-on-rails coffeescript