2014-10-11 50 views
1

@offers 的每個報價都有id和url。 當用戶點擊了div之一,其ID的div ID匹配應該打開報價網址:Rails:OnClick事件在rails中打開url

@offers.each do |offer| 
    <div id=< %=offer.id %>> ... </div> 
<% end %> 

當用戶點擊了div中的一個,我想送他去該網址對應於優惠的ID。我如何使用jquery或coffeescript來做到這一點?

$(".id_of_offer").click -> 
    <<< send user to url of offer >>> 

回答

2

如果你真的只是想一個div鏈接到另一個頁面,你應該簡單地扭曲它周圍的HTML超鏈接。這是最簡單的方法。由於HTML 5允許您使用鏈接包裝塊元素。

<% @offers.each do |offer| %> 
    <%= link_to(offer), id: 'offer-links' do %> 
    <div id=<%= offer.id %>> ... </div> 
    <% end %> 
<% end %> 

如果你想在你的JavaScript而不僅僅是鏈接進行更多的事情,我還是會包裹在div到一個鏈接,並防止默認動作中的鏈接的JavaScript。這樣做的一個優點是,即使用戶已停用JavaScript,該網站仍能正常工作。

$('#offer-links').click -> 
    # some other stuff to do.. 
    true 

你也應該記住,如果你正在使用Turbolinks要註冊的page:load事件後,該事件或將無法正常工作。

+0

感謝。但是(第二種情況)意味着,我在ALL#offer-links上調用相同的函數。但想法是將信息從控制器變量傳遞給JavaScript文件並在那裏訪問它。 – Randomtheories 2014-10-11 20:18:37

0

與jQuery它會是這樣的

$(".id_of_offer").click(function(){ 
    window.open($(this).attr("href")); 
}); 

<a class="id_of_offer" href="url-of-offer"> - 就像例子,因爲它沒有必要附加click事件的事件處理程序上卻有着網址錨標籤作爲href值。
問題是你如何聯繫優惠ID和網址 - 有沒有在網頁上的任何鏈接或是其他地方存儲的網址?只是不確定你的問題的這一部分:「其ID與div的ID匹配的報價的URL」。
您可以將url作爲data-attribute存儲在div上。這樣的:

<div id="id_of_offer" data-url="url_of_offer>..</div> 

然後,它的工作原理類似:

$("#id_of_offer").click(function(){ 
    window.open($(this).data("url")); 
}); 

在新標籤中打開鏈接。如果你想打開當前窗口中的網址,它將是location.href = $(this).data("url");

更新:正如在評論中提到的,ID將在飛行中創建。因此這可以通過例如調整。設置一類= 「要約」 到每個DIV和更改jQuery來

$(".offer").click(function(){ 
    window.open($(this).data("url")); 
}); 

參考:http://api.jquery.com/data/

+0

我不確定是否真的有必要添加'window.open($(this).attr(「href」));',因爲它已經是鏈接的默認行爲。 – Robin 2014-10-11 13:06:05

+0

@Robin當然,你是對的,它只取決於你想打開當前窗口中的鏈接還是想打開新標籤中的鏈接。使用window.open()它會是一個新的選項卡,使用location.href = url它會是當前窗口。 – 2014-10-11 13:09:36

+0

或者只是使用'target =「_ blank」',因爲如果用戶禁用了JavaScript :-) – Robin 2014-10-11 13:12:29