首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用simpleform自动完成jquery

用simpleform自动完成jquery
EN

Stack Overflow用户
提问于 2017-03-08 22:54:21
回答 1查看 306关注 0票数 0

我只是花了一些时间在这个问题上,如果我这样做了,也许其他人也会这样做。所以我先把问题和答案放在一起。

我正在Rails 5上运行,试图稍微干燥一下代码,并将代码从form_for更改为simple_form_for。

使用form_for,我通过跟踪这个教程并解决turbo-链接问题,成功地实现了自动完成。

有:在_form.html.erb下..。

代码语言:javascript
复制
<div class="form-group">
  <%= f.label :cae_id, class: "col-md-5 control-label" %>
  <div class="col-md-7">
    <%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
  </div>
</div>

...

和companies.coffee

代码语言:javascript
复制
$(document).on 'turbolinks:load', ->

  jQuery ->
    $('#company_cae_codenr').autocomplete source: $('#company_cae_codenr').data('autocomplete-source') 
  jQuery ->
    $('#user_company_attributes_cae_codenr').autocomplete source: $('#user_company_attributes_cae_codenr').data('autocomplete-source')

我的caes_controller:

代码语言:javascript
复制
def index_autocomplete
   @caes = Cae.order(:codenr).where("codenr like ?", "%#{params[:term]}%")

   render json: @caes.map(&:codenr)
end

还有我的company.rb

代码语言:javascript
复制
...
  def cae_codenr
    cae.try(:codenr)
  end

  def cae_codenr=(codenr)
    self.cae = Cae.find_by(codenr: codenr) if codenr.present?
  end
...

当我改变

代码语言:javascript
复制
  <div class="form-group">
    <%= f.label :cae_id, class: "col-md-5 control-label" %>
    <div class="col-md-7">
      <%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
    </div>
  </div>

通过匹配的html代码:

代码语言:javascript
复制
  <div class="form-group">
    <label class="integer required col-md-5 control-label" for="company_cae_id">
       <abbr title="required">*</abbr> 
       Cae
    </label>
    <div class="col-md-7">
       <input data-autocomplete-source="/caes/index_autocomplete" data-remote="true" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
    </div>
  </div>

代码语言:javascript
复制
<%= f.input :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>

使用以下HTML

代码语言:javascript
复制
   <div class="input string optional company_cae_codenr">
    <label class="string optional" for="company_cae_codenr">Cae codenr</label>
     <input class="string optional" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
   </div>

当我开始在输入中输入一个数字时,我得到

this.source不是一个函数

错误

所以.我一直在寻找jquery和simpleform的解决方案,还有这个错误消息,但是这里似乎没有任何直接的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 22:54:21

这一问题的解决方案实际上是在我写问题的时候想到的,并决定粘贴html源代码。

所以,这是一个很好的教训,当一个人知道一些有用的东西,并且应该做一些类似的事情不起作用的时候,就可以进行调试。

当我比较两种html代码时,我注意到数据自动完成属性不是用简单的表单发送的。然后问题就来了:如何将数据属性传递给简单的表单?

当然,堆栈溢出有答案:https://stackoverflow.com/a/8332537/1461972,所以我最终得到了:

代码语言:javascript
复制
  <%= f.input :cae_codenr, input_html: {data: { autocomplete_source: index_autocomplete_caes_path}} %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42683502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档