2014-12-03 38 views
-1

我有一個頁面,幾個選擇這樣的:更改事件處理程序與動態ID

<div class="forms"> 
    <div class="activity_form" id="activity_8"> 
    <select id="activity_projectuser_id" name="activity[projectuser_id]"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
    </select> 
    </div> 
    <div class="activity_form" id="activity_9"> 
    <select id="activity_projectuser_id" name="activity[projectuser_id]"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
    </select> 
    </div> 
</div> 

現在我有一個事件處理程序,以獲取選定的值,即僅適用於數字8

var ready; 
ready = function() { 
    $('#activity_8 #activity_projectuser_id').change(function() { 
    console.log("yes!"); 
    }); 
}; 
$(document).ready(ready); 
$(document).on('page:load', ready); 

如何更改事件處理程序,使其適用於任何activity ID?

+2

*「我有幾個選擇這樣的頁面:」 *然後你有一個無效的頁面。您不能在多個元素上使用相同的'id'('activity_projectuser_id')。 – 2014-12-03 14:49:42

+0

我同意,我會這樣做,但接受的答案完全回答了我的要求,如何處理動態選擇 – John 2014-12-03 15:10:31

+1

約翰 - 如果你想匹配*他們所有*,[米林德的答案](http:// stackoverflow。 com/a/27274613/157247)顯然更好,因爲除了工作之外,它並不鼓勵保留無效的「id」值。 (在我的回答中,我以爲你想要一個特定的活動ID,但如果你想要所有人,Milind就會以正確的方式來做到這一點。) – 2014-12-03 15:19:36

回答

1

ID必須是唯一的。您可以根據自己的name,而不是針對他們:

$('.activity_form [name="activity[projectuser_id]"]').change(function() { //or $('.activity_form select') 
    console.log("yes!"); 
}); 
+0

謝謝T.J. :) !! – 2014-12-03 14:53:14

+0

甚至只是'$('[name =「activity [projectuser_id]」]')...' – 2014-12-03 15:20:08

+0

確實是...... – 2014-12-03 15:24:39

0

試試這個選擇

$('[name^="activity"]').change(function() { ... }); 

這將承擔您的姓名與activity開始。您也可以使用通配符*代替^包含活動。

+0

我切換到名稱,謹慎刪除您的downvote?我原本以爲他有選擇的ID,但它是在父母的div上。 – Tomanow 2014-12-03 15:28:11

+0

所以這就是Milind的回答,現在你已經編輯了它,只不過它匹配任何名字以'activity'開頭的東西,而不是特別指出OP說他/她想要的元素。 – 2014-12-03 15:33:22