Ruby on rails ActiveAdmin基于其他选择动态选择\u标记
目前,我有一个表单如下所示:Ruby on rails ActiveAdmin基于其他选择动态选择\u标记,ruby-on-rails,ruby,activeadmin,Ruby On Rails,Ruby,Activeadmin,目前,我有一个表单如下所示: form_tag(manage_titans_admin_collection_path(collection), method: :post) do label_tag('Race:') + ' ' + select_tag(:race, options_for_select(Collectible.where(primary_type: 'cpt_golem').order('race asc').uniq.pluck(:race))) + '
form_tag(manage_titans_admin_collection_path(collection), method: :post) do
label_tag('Race:') +
' ' +
select_tag(:race, options_for_select(Collectible.where(primary_type: 'cpt_golem').order('race asc').uniq.pluck(:race))) +
' ' +
label_tag('Stage:') +
' ' +
select_tag(:stage, options_for_select(1.upto(4))) +
' ' +
label_tag('Level:') +
' ' +
text_field_tag(:level, 1, style: 'width: 100px') +
' ' +
submit_tag('Submit')
end
我想更改它,使:level
选择是一个连续数字的选择标记
,它根据所选的:stage
进行更改。例如,如果阶段为1,我希望显示级别1-20,但如果选择阶段2,我希望显示级别20-40
谢谢你的时间 最后,您使用的helper标记将转换为html,因此我将使用jquery的javascript函数:
假设您的页面中有:
<select name="stage" id="stage">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
1.
2.
3.
4.
以及:
<select name="level" id="level"></select>
函数应该是这样的:
$(document).ready(function(){
$('#stage').on('change', function() {
var level = $("#level");
var value = this.value;
level.empty();
if (value == 1) {
init = 1;
final = 20;
} else if(value == 2) {
init = 21;
final = 40;
} else if(value == 3) {
init = 41;
final = 60;
} else if (value == 4) {
init = 61;
final = 80;
}
var cont = 0;
for(var i=0; (init+cont)<=final; i++) {
level.append('<option value="'+(init + cont)+'">'+(init + cont)+'</option>')
cont++;
}
});
$('#stage').change();
});
$(文档).ready(函数(){
$('#stage')。on('change',function(){
风险值水平=$(“#水平”);
var值=此值;
level.empty();
如果(值==1){
init=1;
最终=20;
}else if(值==2){
初始值=21;
最终=40;
}else if(值==3){
初始值=41;
最终=60;
}else if(值==4){
init=61;
最终=80;
}
var-cont=0;
对于(var i=0;(init+cont)而言,与@danielR的概念相同,但实现更简洁:
(还假设@danielR的第2阶段范围应为21-40,而不是20-40。)
HTML
<select id='stage'>
<option></option>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
</select>
<select id='level'><option></option></select>
1.
2.
3.
4.
jQuery
function addOptions(selector, modifier){
$(selector).each(function(){
$(this).find('option').remove().end().append('<option></option>');
start = ((modifier - 1) * 20) + 1;
end = modifier * 20;
for (i = start; i <= end; i++){
$('<option>').text(i).val(i).appendTo($(this));
}
});
}
$(document).ready(function(){
$('#stage').on('change',function(){
addOptions('#level', parseInt($(this).val(),10));
});
});
函数添加选项(选择器、修改器){
$(选择器)。每个(函数(){
$(this.find('option').remove().end().append('');
开始=((修饰符-1)*20)+1;
结束=修改器*20;
对于(i=start;我编写了您的方法,并使实现更加清晰。