2014-09-04 32 views
-4

我有這樣的Ajax調用

$('#viewproject').click(function() { 
    console.log($(this).data('val')); 
    $.ajax({ 
     type:'PATCH', 
     url: "../home/"+$(this).data('val'), 
     data: $.param({ id: 1}) 
    }); 
    }); 

,即時通訊調用軌

<% @projects.each do |project| %> 
    <li> 
     <figure> 
     <img src="<%= project.imageurl %>"> 
     <figcaption> 
     <h3><%= project.title %></h3> 
     <i class="icon-eye-open"><%= project.count %> Views</i> 
     <a id="viewproject" data-val="<%= project.id %>" target="_blank" href="<%= project.imagelink %>">Take a look</a> 
     </figcaption> 
     </figure> 
    </li> 
<% end %> 

但它僅適用於與viewproject的id的第一個按鈕。任何人都可以告訴我我做錯了什麼?

+2

多個HTML元素不應該具有相同的ID。 – 2014-09-04 20:04:00

回答

4

ID選擇#viewproject將只返回一個元素,因爲應該只有每一個與該ID viewproject

這就是爲什麼你只安裝一個處理器在第一<a>標籤的一個元素。

改爲使用類。

因此,像:

<a class="viewproject" data-val="<%= project.id %>" target="_blank" href="<%= project.imagelink %>">Take a look</a> 

然後:

$('.viewproject').click(function() { //... 

欲瞭解更多的背景,請閱讀id selector的文檔,特別注意這部分(重點煤礦):

選擇具有給定id屬性的單個元素。

它實際上翻譯成document.getElementById,顧名思義,它也只是返回一個元素。

0

你不能在html中爲多個元素使用id。 將「id =」示例「」更改爲「class =」示例「」將解決您的問題。 BR

0

ID必須是唯一的元素,在ID情況下,因爲有多個元素具有相同的ID,它將始終只針對它將在DOM中找到的第一個元素,並將離開其餘的。

<a class="viewproject" data-val="<%= project.id %>" target="_blank" href="<%= project.imagelink %>">Take a look</a> 

,並寫上類選擇事件:HTML元素

$('.viewproject').click(function() { 
........ 
........ 
1

ID是唯一的標識符

因此,而不是ID使用類作爲你迭代生成html的多個塊。

使用你的元素,而不是一類:

<a class="viewproject" data-val="<%= project.id %>" target="_blank" href="<%= project.imagelink %>">Take a look</a> 

...和更新您的jQuery選擇,以反映這種變化:

$('.viewproject')

CSS-技巧大約有ID的優秀文章與類別:http://css-tricks.com/the-difference-between-id-and-class/