**编辑这篇文章,因为我发现问题真的是无法将rails绑定到ajax:success函数.
***使用导轨3.2.3
感谢您抽出时间阅读并尝试帮助.
我在ajax上添加一个简单的淡出功能:正在删除的项目的成功如下:
$(document).ready( jQuery(function($) { $('.delete').bind('ajax:success',function() { $(this).closest('div').fadeOut(); }); })); #For some reason had to pass the $into the function to get it to work,#not sure why this is necessary but doesn't work unless that is done.
之后,我想在用户添加某些东西时创建一个不引人注目的jQuery的对象,并且在这些对象上也有工作删除按钮.我创建了一个create.js.erb文件,该文件在创建一个新项目后调用,创建工作正常,但删除按钮无法访问ajax:success事件.
它在单击时会从数据库中删除数据,但.fadeOut不会与其绑定,因此它不会消失. create.js.erb如下:
#$("div").append(html) here,then call the function below to try and bind the ajax:success function $('.delete').bind('ajax:complete',function() { $(this).closest('div').fadeOut(); });
如果我更改这个绑定到点击功能,它是有效的,但这并不考虑失败的ajax调用:
#$("div").append(html) here,then call the function below to try and bind the ajax:success function $('.delete').bind('click',function() { $(this).closest('div').fadeOut(); });
所以有一些东西必须绑定到ajax:项目创建后的成功.你们有什么想法为什么会发生这种情况?我需要在rails上做一些特殊的事情来获取最新渲染的项目来识别ajax事件吗?任何方向都将不胜感激!
def destroy @user = User.find(params[:user_id]) @item = @user.item.find(params[:id]) @item.destroy respond_to do |format| format.html { redirect_to user_path(@user) } format.json { head :no_content } format.js { render :nothing => true } end end
解决方法
问题听起来像在生成元素之前发生绑定.尝试这个:
$(document).on('ajax:success','.delete',function(e) { $(e.currentTarget).closest('div').fadeOut(); });