将link_to_function与锚点一起使用

时间:2011-06-28 15:13:35

标签: javascript jquery ruby-on-rails

我有这样的观看形式:

<% @company.projects.each do |project| %>
<%= link_to_function project.title, "toggle_information_for('#{project.id}')" %>
<br />
  <div id="information_for_<%= project.id %>">
  <p><%= project.information %></p>
  <br/>
  </div>
<% end %>

我有这个jQuery函数:

function toggle_information_for(project){
$("#information_for_"+project).toggle();
}

如何使link_to像锚一样?

例如:

如果我点击project.title,然后通过toggle_information_for函数打开有关项目的信息,并将url更改为/#project_id。我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题,但是你想要调用toggle_information_for JS函数,你需要像这样写link_to

<%= link_to_function project.title, "javascript:toggle_information_for('#{project.id}')" %>

如果您要将项目ID添加到您的网址,请尝试:

function toggle_information_for(project){
    $('#information_for_' + project).toggle();
    location.hash = project;
}

希望这会有所帮助。虽然这有效,但我建议删除链接的href中的直接JS调用,并通过编写link_to直接在JS中添加一个事件处理程序:

<%= link_to_function project.title, "#information_for_#{project.id}" %>

像这样编写JavaScript:

function toggle_information_for(e){
    $(e.target.href).toggle();
    location.hash = project;
}

$('#wrapper_div').delegate('click', 'a', toggle_information_for);

答案 1 :(得分:0)

我建议添加一个类,然后将jQuery逻辑与html分开。

<% @company.projects.each do |project| %>
<div class="info_for" id="info_for_<%= project.id %>">
<%=project.title%>
<br />
  <div>
  <p><%= project.information %></p>
  <br/>
  </div>
</div>
<% end %>

然后是一些jQuery

$('.info_for').click(function(){
   $('div',this).toggle();
});