我正在尝试使用选择框来显示多个项目。我的select标签包含如下:
<%= select_tag "number_of_pets", options_for_select(allowed_pets_options, @pet_number_storage), onchange:"show_pet_forms(this.value, #{RecordsHelper::ALLOWED_PETS})" %>
并像这样分析成HTML:
<select id="number_of_pets" name="number_of_pets" onchange="show_pet_forms(this.value, 4)">
<option value="1" selected="selected">1 Pet</option>
<option value="2">2 Pets</option>
<option value="3">3 Pets</option>
<option value="4">4 Pets</option>
</select>
在我的application.html.erb文件中,在head区域中,我有这个javascript:
<script type="text/javascript">
function show_pet_forms(pets_selected, pets_allowed) {
for (var i=1;i<=pets_selected;i++)
{
element_id = "pet-" + i;
document.getElementById(element_id).style.visibility = "visible";
document.getElementById(element_id).style.display = "block";
}
for (var i=(pets_selected+1);i<=pets_allowed;i++)
{
element_id = "pet-" + i;
document.getElementById(element_id).style.visibility = "hidden";
document.getElementById(element_id).style.display = "none";
}
}
</script>
(原来javascript是在coffeescript文件中,但是在我试图找出问题所在的时候我移动了它。
我试图展示和隐藏的元素是:
<div id="pet-1">
SOME STUFF HERE
</div>
...
<div id="pet-4">
SOME STUFF HERE
</div>
不幸的是,当我在选择框中选择其中一个选项时,我没有看到任何更改,我无法弄清楚它是否没有正确触发事件,或者我的javascript是否有问题(最有可能) )。错误在哪里?
谢谢!
答案 0 :(得分:1)
第二个for
没有隐藏其他div。
for (var i=(pets_selected+1);i<=pets_allowed;i++)
在上述情况下,您尝试添加pets_selected + 1
,它将连接而不是添加。
首先需要将其解析为整数,然后添加。
for (var i=(parseInt(pets_selected)+1);i<=pets_allowed;i++)