有条件的下拉人口减少

时间:2015-05-18 20:33:35

标签: javascript jquery

现在我有两个数字下拉列表。我想要的功能是:当我从第一个列表中选择一个选项时,将所选选项的值与第二个列表的选项值进行比较,并隐藏第二个列表中大于第一个列表所选选项值的任何选项。

<select name="input_6" id="input_2_6" class="medium gfield_select" tabindex="13">
  <option value="117500">115,001 - 120,000</option>
  <option value="122500">120,001 - 125,000</option>
  <option value="127500">125,001 - 130,000</option>
  <option value="132500">130,001 - 135,000</option>
  <option value="137500">135,001 - 140,000</option>
  <option value="142500">140,001 - 145,000</option>
  <option value="147500">145,001 - 150,000</option>
  <option value="152500">150,001 - 155,000</option>
  <option value="157500">155,001 - 160,000</option>
  <option value="162500">160,001 - 165,000</option>
  <option value="167500">165,001 - 170,000</option>
  <option value="172500">170,001 - 175,000</option>
  <option value="177500">175,001 - 180,000</option>
  <option value="182500">180,001 - 185,000</option>
  <option value="187500">185,001 - 190,000</option>
  <option value="192500">190,001 - 195,000</option>
  <option value="197500">195,001 - 200,000</option>
  <option value="205000">200,001 - 210,000</option>
  <option value="215000">210,001 - 220,000</option>
  <option value="225000">220,001 - 230,000</option>
  <option value="235000">230,001 - 240,000</option>
  <option value="245000">240,001 - 250,000</option>
  <option value="255000" selected="selected">250,001 - 260,000</option>
  <option value="265000">260,001 - 270,000</option>
  <option value="275000">270,001 - 280,000</option>
  <option value="285000">280,001 - 290,000</option>
  <option value="295000">290,001 - 300,000</option>
  <option value="305000">300,001 - 310,000</option>
  <option value="315000">310,001 - 320,000</option>
  <option value="325000">320,001 - 330,000</option>
  <option value="335000">330,001 - 340,000</option>
  <option value="345000">340,001 - 350,000</option>
  <option value="355000">350,001 - 360,000</option>
</select>
<select name="input_7" id="input_2_7" class="medium gfield_select" tabindex="16">
  <option value="102500" selected="selected">100,000 - 105,000</option>
  <option value="107500">105,000 - 110,000</option>
  <option value="112500">110,000 - 115,000</option>
  <option value="117500">115,000 - 120,000</option>
  <option value="122500">120,000 - 125,000</option>
  <option value="127500">125,000 - 130,000</option>
  <option value="132500">130,000 - 135,000</option>
  <option value="137500">135,000 - 140,000</option>
  <option value="142500">140,000 - 145,000</option>
  <option value="147500">145,000 - 150,000</option>
  <option value="152500">150,000 - 155,000</option>
  <option value="157500">155,000 - 160,000</option>
  <option value="162500">160,000 - 165,000</option>
  <option value="167500">165,000 - 170,000</option>
  <option value="172500">170,000 - 175,000</option>
  <option value="177500">175,000 - 180,000</option>
  <option value="182500">180,000 - 185,000</option>
  <option value="187500">185,000 - 190,000</option>
  <option value="192500">190,000 - 195,000</option>
  <option value="197500">195,000 - 200,000</option>
  <option value="202500">200,000 - 205,000</option>
  <option value="207500">205,000 - 210,000</option>
  <option value="212500">210,000 - 215,000</option>
  <option value="217500">215,000 - 220,000</option>
  <option value="222500">220,000 - 225,000</option>
  <option value="227500">225,000 - 230,000</option>
  <option value="232500">230,000 - 235,000</option>
  <option value="237500">235,000 - 240,000</option>
  <option value="242500">240,000 - 245,000</option>
  <option value="247500">245,000 - 250,000</option>
  <option value="252500">250,000 - 255,000</option>
  <option value="257500">255,000 - 260,000</option>
  <option value="262500">260,000 - 265,000</option>
  <option value="267500">265,000 - 270,000</option>
  <option value="272500">270,000 - 275,000</option>
  <option value="277500">275,000 - 280,000</option>
  <option value="282500">280,000 - 285,000</option>
  <option value="287500">285,000 - 290,000</option>
  <option value="292500">290,000 - 295,000</option>
  <option value="297500">295,000 - 300,000</option>
  <option value="302500">300,000 - 305,000</option>
  <option value="307500">305,000 - 310,000</option>
  <option value="312500">310,000 - 315,000</option>
  <option value="317500">315,000 - 320,000</option>
  <option value="322500">320,000 - 325,000</option>
  <option value="327500">325,000 - 330,000</option>
  <option value="332500">330,000 - 335,000</option>
  <option value="337500">335,000 - 340,000</option>
  <option value="342500">340,000 - 345,000</option>
  <option value="347500">345,000 - 350,000</option>
  <option value="352500">350,000 - 355,000</option>
</select>

以上是我正在使用的两个列表(由重力表格生成)。

以下是我迄今为止尝试过的两种jQuery变种:

<script type="text/javascript">
$('#input_2_6').change(function(){
    var initial = $('#input_2_6 option:selected').val();
    secondDropPop(initial);
    function secondDropPop(i){
        $('#input_2_7 option').each(function(){
            if ($(this).val() > i){
                $(this).css('display','none');
            }
        });
    }
});
</script>

<script type="text/javascript">
$('#input_2_6').change(function(){
    $('#input_2_6 option').each(function(){
        if($(this).is(':selected')){
            var initial = $(this).val();
            secondDropPop(initial);
        }
    });
    function secondDropPop(i){
        $('#input_2_7 option').each(function(){
            if ($(this).val() > i){
                $(this).css('display','none');
            }
        });
    }
});
</script>

我做错了什么?

jQuery ver:1.11.3

1 个答案:

答案 0 :(得分:2)

jQuery documention

  

对于数组,每次都会向回调传递一个数组索引和相应的数组值。

查看$(this).val() > ii未定义。这应该是回调的第一个参数:

    $('#input_2_7 option').each(function(i){
        i = parseInt(i, 10);
        if (parseInt($(this).val(), 10) > i){
            $(this).css('display','none');
        }
    });

修改

这里的问题是你试图将样式应用于option标签,这是一种非常不稳定的方法,因为每个浏览器都会将样式应用于option标签(某些浏览器不允许任何样式应用) )。因此,您最好的选择是动态创建第二个下拉列表。以下是此方法的示例。

$('#input_2_6').change(function(){
    var initial = $('#input_2_6 option:selected').val();
    secondDropPop(initial);
    function secondDropPop(i){
        $('#input_2_7 option').each(function(){
            if ($(this).val() > i){
                $(this).css('display','none');
            }
        });
    }
});

$('#input_2_6').change(function(){
    $('#input_2_6 option').each(function(){
        if($(this).is(':selected')){
            var initial = $(this).val();
            secondDropPop(initial);
        }
    });
    function secondDropPop(i){
        var $dropdown = $('#input_2_7').hide();//hide the dropdown as this will prevent the browser from rendering every time an option is appended
        $dropdown.empty();
        $('#full_dropdown option').each(function(){
            if ($(this).val() <= i){
                $dropdown.append($(this).clone());
            }
        });
        $dropdown.show();
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="input_6" id="input_2_6" class="medium gfield_select" tabindex="13">
  <option value="117500">115,001 - 120,000</option>
  <option value="122500">120,001 - 125,000</option>
  <option value="127500">125,001 - 130,000</option>
  <option value="132500">130,001 - 135,000</option>
  <option value="137500">135,001 - 140,000</option>
  <option value="142500">140,001 - 145,000</option>
  <option value="147500">145,001 - 150,000</option>
  <option value="152500">150,001 - 155,000</option>
  <option value="157500">155,001 - 160,000</option>
  <option value="162500">160,001 - 165,000</option>
  <option value="167500">165,001 - 170,000</option>
  <option value="172500">170,001 - 175,000</option>
  <option value="177500">175,001 - 180,000</option>
  <option value="182500">180,001 - 185,000</option>
  <option value="187500">185,001 - 190,000</option>
  <option value="192500">190,001 - 195,000</option>
  <option value="197500">195,001 - 200,000</option>
  <option value="205000">200,001 - 210,000</option>
  <option value="215000">210,001 - 220,000</option>
  <option value="225000">220,001 - 230,000</option>
  <option value="235000">230,001 - 240,000</option>
  <option value="245000">240,001 - 250,000</option>
  <option value="255000" selected="selected">250,001 - 260,000</option>
  <option value="265000">260,001 - 270,000</option>
  <option value="275000">270,001 - 280,000</option>
  <option value="285000">280,001 - 290,000</option>
  <option value="295000">290,001 - 300,000</option>
  <option value="305000">300,001 - 310,000</option>
  <option value="315000">310,001 - 320,000</option>
  <option value="325000">320,001 - 330,000</option>
  <option value="335000">330,001 - 340,000</option>
  <option value="345000">340,001 - 350,000</option>
  <option value="355000">350,001 - 360,000</option>
</select>
<select name="input_7" id="input_2_7" class="medium gfield_select" tabindex="16" style="display:none">
</select>
<!--Create a new dropdown that is not used for anything except pulling data from. Turning this into an array could speed things up-->
<select id="full_dropdown" style="display:none;" tabindex="16">
  <option value="102500" selected="selected">100,000 - 105,000</option>
  <option value="107500">105,000 - 110,000</option>
  <option value="112500">110,000 - 115,000</option>
  <option value="117500">115,000 - 120,000</option>
  <option value="122500">120,000 - 125,000</option>
  <option value="127500">125,000 - 130,000</option>
  <option value="132500">130,000 - 135,000</option>
  <option value="137500">135,000 - 140,000</option>
  <option value="142500">140,000 - 145,000</option>
  <option value="147500">145,000 - 150,000</option>
  <option value="152500">150,000 - 155,000</option>
  <option value="157500">155,000 - 160,000</option>
  <option value="162500">160,000 - 165,000</option>
  <option value="167500">165,000 - 170,000</option>
  <option value="172500">170,000 - 175,000</option>
  <option value="177500">175,000 - 180,000</option>
  <option value="182500">180,000 - 185,000</option>
  <option value="187500">185,000 - 190,000</option>
  <option value="192500">190,000 - 195,000</option>
  <option value="197500">195,000 - 200,000</option>
  <option value="202500">200,000 - 205,000</option>
  <option value="207500">205,000 - 210,000</option>
  <option value="212500">210,000 - 215,000</option>
  <option value="217500">215,000 - 220,000</option>
  <option value="222500">220,000 - 225,000</option>
  <option value="227500">225,000 - 230,000</option>
  <option value="232500">230,000 - 235,000</option>
  <option value="237500">235,000 - 240,000</option>
  <option value="242500">240,000 - 245,000</option>
  <option value="247500">245,000 - 250,000</option>
  <option value="252500">250,000 - 255,000</option>
  <option value="257500">255,000 - 260,000</option>
  <option value="262500">260,000 - 265,000</option>
  <option value="267500">265,000 - 270,000</option>
  <option value="272500">270,000 - 275,000</option>
  <option value="277500">275,000 - 280,000</option>
  <option value="282500">280,000 - 285,000</option>
  <option value="287500">285,000 - 290,000</option>
  <option value="292500">290,000 - 295,000</option>
  <option value="297500">295,000 - 300,000</option>
  <option value="302500">300,000 - 305,000</option>
  <option value="307500">305,000 - 310,000</option>
  <option value="312500">310,000 - 315,000</option>
  <option value="317500">315,000 - 320,000</option>
  <option value="322500">320,000 - 325,000</option>
  <option value="327500">325,000 - 330,000</option>
  <option value="332500">330,000 - 335,000</option>
  <option value="337500">335,000 - 340,000</option>
  <option value="342500">340,000 - 345,000</option>
  <option value="347500">345,000 - 350,000</option>
  <option value="352500">350,000 - 355,000</option>
</select>