Javascript 当创建和销毁都是AJAX时,在DOM中找不到ID

Javascript 当创建和销毁都是AJAX时,在DOM中找不到ID,javascript,ruby-on-rails,Javascript,Ruby On Rails,我遇到了一个问题,我允许我的用户创建一个项目,但他们也可以从同一页面删除该项目 当前,当用户添加一个项目时,它会通过create.js.erb添加到站点,现在我还添加了销毁该项目的功能。如果他们单击delete,该方法将被删除,但是我无法将其从站点中删除 原因是,如果我在控制台中运行$('item-13')f.ex,则在DOM中找不到它,因为它是通过AJAX添加的。因此,我遇到的问题是,在我的destroy.js.erb中,我有: $("#item-<%= @current_item %&

我遇到了一个问题,我允许我的用户创建一个项目,但他们也可以从同一页面删除该项目

当前,当用户添加一个项目时,它会通过
create.js.erb
添加到站点,现在我还添加了销毁该项目的功能。如果他们单击delete,该方法将被删除,但是我无法将其从站点中删除

原因是,如果我在控制台中运行$('item-13')f.ex,则在DOM中找不到它,因为它是通过AJAX添加的。因此,我遇到的问题是,在我的
destroy.js.erb
中,我有:

$("#item-<%= @current_item %>").remove();
我如何使它能够在创建项目时找到附加到显示该项目的div的id


重新加载页面后,我可以基于AJAX删除div。

jQuery选择将查看当前dom,即它将包含使用AJAX添加的对象

我认为问题在于您已经在控制器中定义了处理js请求的块,如下所示:

format.js { @current_item = @line_item.id }
这意味着它不会继续渲染
destroy.js.erb
——如果没有定义其他内容,这是默认操作

我将通过将所有内容移动到destroy.js.erb中来解决此问题:

#controller
def destroy
 @line_item = @cart.line_items.find(params[:id])
  respond_to do |format|
   format.js 
  end
end

#destroy.js.erb
$("#item-<%= @line_item.id %>").remove();
#控制器
def销毁
@line\u item=@cart.line\u items.find(参数[:id])
回应待办事项|格式|
format.js
结束
结束
#destroy.js.erb
$(“#项-”).remove();

jQuery select将查看当前dom,即它将包含使用Ajax添加的对象

我认为问题在于您已经在控制器中定义了处理js请求的块,如下所示:

format.js { @current_item = @line_item.id }
这意味着它不会继续渲染
destroy.js.erb
——如果没有定义其他内容,这是默认操作

我将通过将所有内容移动到destroy.js.erb中来解决此问题:

#controller
def destroy
 @line_item = @cart.line_items.find(params[:id])
  respond_to do |format|
   format.js 
  end
end

#destroy.js.erb
$("#item-<%= @line_item.id %>").remove();
#控制器
def销毁
@line\u item=@cart.line\u items.find(参数[:id])
回应待办事项|格式|
format.js
结束
结束
#destroy.js.erb
$(“#项-”).remove();

我不认为AJAX是问题所在-我认为只是您在选择器的开头省略了哈希:
$('item-13')
应该是
$('#item-13')
正如您在destroy.js.erb中看到的那样,哈希在那里是的,这是一个令人费解的例子。看到我的答案了。我想问题出在你的create.js.erb中,你能发布那个文件吗?我不认为AJAX是问题所在-我认为只是你在选择器的开头省略了散列:
$('item-13')
应该是
$('#item-13')
,正如你在destroy.js.erb中看到的那样,散列是有的,这是一个令人费解的例子。看到我的答案了。我想问题出在你的create.js.erb中,你能发布那个文件吗?这对我不起作用。一定有一些潜在的问题。如果我添加了一个项目,那么转到web控制台并键入$(“#item-64”).remove();它仍然不会被移除。但是,如果我刷新页面,它将被删除。如果我查找#item-64,它将返回:j…y.fn.init{上下文:文档,选择器:“#item-76”},
$(“#item-64”).size()返回什么?如果它是零,那么它就不在页面上。添加项目的Ajax确实有效吗?它是否提供了正确的id?检查项目(假设它存在)并读取其ID。它返回0。我正在手动检查ID是否确实存在于站点上,并且确实存在。正如我在刷新时所说,它返回1。是否create.js.erb会在创建时呈现购物车div?如果我尝试删除刷新页面之前存在的项目,它会工作得很好。听起来问题在于您的创建操作。页面上“手动检查”的元素的ID是多少?这对我不起作用。一定有一些潜在的问题。如果我添加了一个项目,那么转到web控制台并键入$(“#item-64”).remove();它仍然不会被移除。但是,如果我刷新页面,它将被删除。如果我查找#item-64,它将返回:j…y.fn.init{上下文:文档,选择器:“#item-76”},
$(“#item-64”).size()返回什么?如果它是零,那么它就不在页面上。添加项目的Ajax确实有效吗?它是否提供了正确的id?检查项目(假设它存在)并读取其ID。它返回0。我正在手动检查ID是否确实存在于站点上,并且确实存在。正如我在刷新时所说,它返回1。是否create.js.erb会在创建时呈现购物车div?如果我尝试删除刷新页面之前存在的项目,它会工作得很好。听起来问题在于您的创建操作。页面上“手动检查”的元素的ID是多少?