rails ajax生成的javascript链接不起作用

时间:2013-01-12 08:08:14

标签: javascript ruby-on-rails ajax

这应该很简单:

鉴于此链接:

<a id="description_link_146" class="document_icon pull-left" data-slug="link-to-the-blog" data-remote="true" href="/challenges/link-to-the-blog/description_line"></a>

单击时,它会不显眼地执行此js.erb视图,修改我们的链接以触发javascript hideDescription()函数:

$("#task_<%=@challenge.id%>").append("<%=j render partial: 'description_line', locals: {challenge: @challenge}%>");
$("#description_link_<%=@challenge.id%>").attr("href","javascript: hideDescription(<%=@challenge.id%>)");

这是hideDescription功能:

function hideDescription(id) {
    alert("hide");    
}

此链接无效。知道为什么吗?我知道在Jquery中,我需要在加载后重新绑定它,但这是纯粹的javascript。

感谢。

2 个答案:

答案 0 :(得分:0)

据我所知,这是你的js.erb文件代码:

$("#task_<%=@challenge.id%>").append("<%=j render partial: 'description_line', locals: {challenge: @challenge}%>");
$("#description_link_<%=@challenge.id%>").attr("href","javascript: hideDescription(<%=@challenge.id%>)");

如果您只想在点击后隐藏链接,可以这样做:

$("#description_link_<%=@challenge.id%>").hide();

答案 1 :(得分:0)

问题似乎是因为我使用了远程链接。我无法在href中使用javascript with remote = true

即使将远程属性更改为false也无济于事。我想这个链接需要解除绑定,但我不知道该怎么做。

我最后创建了一个单独的隐藏链接并使用hide()和show()方法进行游戏:

链接:

<%= link_to "", description_line_challenge_path(challenge), class: "document_icon pull-left", id: "description_link_#{challenge.id}", data: {slug: challenge.slug}, remote: true %>
<%= link_to "", "javascript:hideDescription(#{challenge.id})", class: "document_icon pull-left", style: "display: none", id: "description_hide_link_#{challenge.id}", data: {slug: challenge.slug} %>

js.erb show file:

$("#task_<%=@challenge.id%>").append("<%=j render partial: 'description_line', locals: {challenge: @challenge}%>");
$("#description_link_<%=@challenge.id%>").hide();
$("#description_hide_link_<%=@challenge.id%>").show();

javascript函数:

function hideDescription(id) {
    $("#task_description_" + id).remove();
    $("#description_link_" + id).show();
    $("#description_hide_link_" + id).hide();
}

这不是“铁路方式”,但我不知道更好的方法。

有人吗?