2014-12-03 39 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