jQuery-UI自动完成小部件没有绑定到Rails中的ajax加载的部分表单

时间:2012-11-05 22:54:36

标签: jquery ruby-on-rails ajax ruby-on-rails-3 jquery-ui

我有一个带有文本字段的表单,它使用jQuery-UI自动完成小部件。 我正在使用带有Ruby on Rails的<li id="activity_<%= activity.id %>"><%= link_to activity.address, edit_activity_path(activity), :remote => true %></li>

的AJAX加载此表单

由于在document.ready之后加载表单,自动完成jQuery小部件不会绑定到DOM元素。

由于这不是一个jQuery AJAX调用,我不认为在Ajax调用之后我可以用来绑定自动完成小部件的成功回调。

我不知道如何使用我在自动完成窗口小部件中看到的.on()函数,因为语法是$('selector')。autocomplete

有人可以帮忙吗?

这是edit.js.erb文件:

$("#activity_form").html("<%= escape_javascript(render(:partial => "form"))%>");

这是我的jQuery代码,用于将自动完成小部件绑定到我的文本字段。

jQuery ->       
$('[type="text"][name*="[geocode_location]"]').autocomplete
  source: (request, response) ->
    $.ajax 
      url: "http://ws.geonames.org/searchJSON"
      dataType: "jsonp"
      data: 
        featureClass: "P"
        style: "full"
        maxRows: 12
        name_startsWith: request.term

      success: (data) ->
        response $.map(data.geonames, (item) ->
          label: item.name + ((if item.adminName1 then ", " + item.adminName1 else "")) + ", " + item.countryName
          value: item.lat + ", " + item.lng
        )
  minLength: 2

  open: ->
    $(this).removeClass("ui-corner-all").addClass "ui-corner-top"

  close: ->
    $(this).removeClass("ui-corner-top").addClass "ui-corner-all"
  focus: (event, ui) ->
    event.preventDefault()
    $(this).val ui.item.label      
  select: (event, ui) ->
    event.preventDefault()
    $(this).val ui.item.label
    $(this).siblings('[name*="[geocode_ll]"]').val ui.item.value

3 个答案:

答案 0 :(得分:2)

我在这里读到了每个Rails Ajax调用可以绑定的6个自定义事件,包括ajax:成功,只要成功的ajax请求就会触发。

http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/

所以我做了$(this).bind“ajax:success”,它允许$(this)这是本例中的整个窗口,在任何“ajax:success”事件之后触发其他一些函数。

所以,我最终这样做了:

jQuery ->
  $(this).bind "ajax:success", -> 
    jQuery ->       
      $('[type="text"][name*="[geocode_location]"]').autocomplete
       --REST OF CODE--

答案 1 :(得分:1)

我有类似的情况,在ajax调用后渲染包含自动完成输入字段的部分时,自动完成功能不再起作用。我正在使用rails3-jquery-autocomplete宝石。

问题很简单,所有自动完成输入字段仅绑定到初始文档加载时的自动完成功能。要再次绑定新的自动填充字段,只需调用以下函数:

jQuery('input[data-autocomplete]').railsAutocomplete();

答案 2 :(得分:0)

  

$( '[类型= “文本”] [名* = “[geocode_location]”]')。住( “自动完成”,   function(){your code})

请尝试。