javascript - typeahead.bundle.js 如何通过在下拉建议上按 ENTER 开始搜索?

标签 javascript ruby-on-rails coffeescript typeahead.js

我设法通过单击下拉建议来使其进行搜索。但当我按 ENTER 时它没有响应。

app/assets/javascripts/custom.coffee

$ ->
    movies = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.whitespace,
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: '/movies/autocomplete?query=%QUERY',
            wildcard: '%QUERY'
        }
    });

    $('#query').typeahead(null, {
        source: movies
    });

    $('.tt-menu').on 'click', ->
        $('#search_form').submit()

    $('.tt-menu').on 'keypress', (e) ->
        if (e.which == 13)
            $('#search_form').submit()

任何帮助将不胜感激!

最佳答案

我相信它不起作用您的 $('#search_form').submit() 也许您想做:

 $('.tt-menu').on 'keypress', (e) ->
        if (e.which == 13)
            $.post('/movies', {your_model: {your_field1: 'test', your_field2: 'test2'}}; )

其实你可以在我的生产服务器上测试一下 https://sprachspiel.xyz ,我在开发中测试过。

我转到主页 ( https://sprachspiel.xyz ) 并使用 f12 打开我的 javascript 控制台。然后在 javascript 控制台中我发布了以下代码:

$.post('/subscription', { subscription: {email: 'test1@email.com'}});

此代码向我的后端发出 post 请求,使用以下结构将参数传递给我的 Controller {subscription: {email: 'test1@email.com'}}

这是我的路线

subscription POST /subscription(.:format) subscription#create

我的订阅 Controller 有一个create操作来保存订阅,但最重要的是在私有(private)方法中具有以下强参数

def subscription_params
  params.require(:subscription).permit(:email)
end  

第一次尝试我很幸运,我能够正确编写 jquery .post() 请求,但如果您现在不知道如何构造参数,您只需设置一个在您的服务器应用程序代码 subscription_params 上断点,看看哪里出了问题。

当您执行请求时,您的服务器将停止在binding.pry

我测试过,我的服务器在我的db中创建了一个新条目

Started POST "/subscription" for 127.0.0.1 at 2017-11-01 16:32:14 +0100
Processing by BuildingsController#createSubscription as */*
  Parameters: {"subscription"=>{"email"=>"test1@email.com"}}
   (0.2ms)  BEGIN
  SQL (0.6ms)  INSERT INTO "subscriptions" ("email", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["email", "test1@email.com"], ["created_at", "2017-11-01 15:32:14.790279"], ["updated_at", "2017-11-01 15:32:14.790279"]]
   (19.8ms)  COMMIT
Redirected to http://localhost:3000/
Completed 200 OK in 26ms (ActiveRecord: 20.6ms)

但是如果你这样做,你应该确保你的js以某种方式显示错误消息

关于javascript - typeahead.bundle.js 如何通过在下拉建议上按 ENTER 开始搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47051016/

相关文章:

javascript - VueJS - 如何使用 ajax 调用的结果动态初始化模板

javascript - 跟踪胜利 剪刀石头布

Javascript:将文本框数字条目转换为相应的字母等级

javascript - 在 IE 8 中加速 ":not"jQuery CSS 选择器?

javascript - 为什么页面在使用 scrollBy() 时会振动?

ruby-on-rails - Rails 和页面特定的 Javascript

javascript - 运行 N 个带有并行限制的 Promise

ruby-on-rails - Rails - 如何在自定义布局中使用 application.html.erb?

ruby-on-rails - 在 Rails 4 中使用 minitest 测试强参数

javascript - 模拟/ stub 构造函数