Rails – 为什么远程提交表单后jQuery无法加载

Rails – 为什么远程提交表单后jQuery无法加载,第1张

概述为了简单起见,我有一个更新部分的表单.没什么特别的.在部分内容中,我有一个jQuery可排序列表.在更新表单之前,我可以毫无问题地拖动列表中的内容. 但是,在我更新列表后,就像js没有被重新加载,我必须刷新整个页面才能让事情再次滚动. 我已经尝试了所有的东西,甚至借用了demo jQuery application from Ryan Bates Esq. over here.但是在我将部分js 为了简单起见,我有一个更新部分的表单.没什么特别的.在部分内容中,我有一个jquery可排序列表.在更新表单之前,我可以毫无问题地拖动列表中的内容.

但是,在我更新列表后,就像Js没有被重新加载,我必须刷新整个页面才能让事情再次滚动.

我已经尝试了所有的东西,甚至借用了demo jQuery application from Ryan Bates Esq. over here.但是在我将部分Js shizzle放入部分之后也无效.

我确定这很简单,但我是一个AJAX / jquery新手,我真的很挣扎.

视图:

#test_one  = render "test_one"

部分“test_one”

= form_for @location,:remote => true do |f|  %table    %tr= collection_select(:location,:type_IDs,Type.all,:ID,:name,{:prompt => true},:multiple => true,:class=>"chzn-select")     %tr       %td         %ul#types.unstyled{"data-update-url" => sort_types_locations_url}           - @types.each do |type|             = content_tag_for :li,type do               %span.handle                 [Drag]               = type.name

update.Js.erb

$("#test_one").HTML('<%= escape_JavaScript render("test_two") %>');

在我的控制器中:

def update    @location = Location.find(params[:ID])    @types = @location.types.order('location_types.position').limit(2)    respond_to do |format|      if @location.update_attributes!(params[:location])        flash[:notice] = 'Settings updated successfully'        format.HTML { redirect_to edit_location_path }        format.Js      else        format.HTML { render action: "edit_access" }        format.Js { render action: "update_access_errors" }      end    end  end

最后在locations.Js.coffee中

jquery ->  $('#types').sortable(      axis: 'y'      update: ->        $.post($(this).data('update-url'),$(this).sortable('serialize'))      )

更新工作,我没有错误,我的控制台中什么都没有.现在我已经失去了很多 – 在更新记录后如何让Js重新加载?

解决方法 原因是,您的自定义Js(关于可排序)在文档就绪时加载,并且一旦部分更新就不会再次触发.

解决方案是:将自定义Js包装到函数中.文档就绪和更新发生时调用此函数.

# locations.Js.coffee$->  $(document).custom_Js()$.fn.custom_Js ->  $('#types').sortable(    axis: 'y'    update: ->      $.post($(this).data('update-url'),$(this).sortable('serialize'))    )# update.Js.erb$("#test_one").HTML('<%= escape_JavaScript render("test_two") %>');$(document).custom_Js();

关于自定义Js函数的附注:这里不需要包含所有自定义代码,只需要与AJAX将要添加/更新的内容相关的部分.

总结

以上是内存溢出为你收集整理的Rails – 为什么远程提交表单后jQuery无法加载全部内容,希望文章能够帮你解决Rails – 为什么远程提交表单后jQuery无法加载所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1064662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存