2013-01-12 39 views
0

這應該是一個簡單的:軌AJAX生成的JavaScript鏈接不起作用

鑑於此鏈接:

<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_<%[email protected]%>").append("<%=j render partial: 'description_line', locals: {challenge: @challenge}%>"); 
$("#description_link_<%[email protected]%>").attr("href","javascript: hideDescription(<%[email protected]%>)"); 

這是hideDescription功能:

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

此鏈接不起作用。任何想法爲什麼?我知道在Jquery中,我需要在加載後重新綁定它,但這是純粹的JavaScript。

謝謝。

回答

0

據我瞭解,這是你的js.erb文件的代碼:

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

如果你只想隱藏鏈接點擊後,你可以這樣做:

$("#description_link_<%[email protected]%>").hide(); 
+0

是的,這可能是一種方法,但我在hideDescription函數中添加了其他內容(如重新定義鏈接)。 – ndemoreau

+0

你可以在js.erb文件中做所有這些事情,或者我不明白你想要做什麼 – jizak

+0

我使用js.erb來加載div。要關閉這個div,我想避免往返服務器,所以我更喜歡在頁面上有一個JavaScript。這個JavaScript應該刪除描述並重置鏈接到它的原始狀態。如果你有更好的方法來做到這一點,我可以很開放,但我認爲我所做的事非常簡單,錯誤應該很小。謝謝你的寶貝 – ndemoreau

0

看來,該問題是由於我使用了遠程鏈接。我無法在href中使用javascript與remote = true

即使將remote屬性更改爲false也沒有幫助。我想這個鏈接需要解除綁定,但我不知道該怎麼做。

我結束了創建一個獨立的隱藏鏈接,並使用hide()和節目播放()方法:

鏈接:

<%= 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顯示文件:

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

javascript功能:

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

這不是很「鐵軌的方式」,但我不知道更好的方法。

任何人都可以嗎?