选择onchange而不是在rails 3中调用函数

时间:2013-06-06 14:10:51

标签: javascript ruby-on-rails ruby-on-rails-3 dom

我正在尝试使用选择框来显示多个项目。我的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是否有问题(最有可能) )。错误在哪里?

谢谢!

1 个答案:

答案 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++)

See fiddle