检查动态创建的阵列中是否存在选定的选项

时间:2011-10-26 16:01:53

标签: javascript jquery html

我有一些看起来像这样的代码。 select#member_id的值由PHP动态添加。我正在尝试确定用户是否从列表中选择rescom选项,这将决定我是否在第二个下拉列表中动态添加。使用代码,我始终得到-1脚本提醒。 console.log来电打印出[1, 3] [2]

<script>
var res_members = new Array();
var com_members = new Array();
</script>
<p><select name="member_id" id="member_id">
    <option value=""></option>
    <option value="1">Alice (res)</option><script>res_members.push(1);</script>
    <option value="2">Bob (com)</option><script>com_members.push(2);</script>
    <option value="3">Carl (res)</option><script>res_members.push(3);</script>
</select></p>
<script>
    console.log(res_members, com_members);
    $(function(){
        $('#member_id').change(function(){
            alert($.inArray($('#member_id').val(), res_members));
            alert($.inArray($('#member_id').val(), com_members));
        });
    });
</script>

1 个答案:

答案 0 :(得分:2)

为什么不选择更简单,更方便的东西:

<p><select name="member_id" id="member_id">
    <option value=""></option>
    <option class="res" value="1">Alice (res)</option>
    <option class="com" value="2">Bob (com)</option>
    <option class="res" value="3">Carl (res)</option>
</select></p>
<script>
    $(function(){
        $('#member_id').change(function(){
            var isRes = $(this).find(':selected').hasClass('res');
            alert(isRes ? "res" : "com");
        });
    });
</script>

<强> See it in action

更新:为什么您当前的代码不起作用

这是因为您在使用push搜索字符串时将整数推入数组(使用$.inArray)。更改其中任何一项都会使现有代码生效。

所以一个解决方案是推送字符串:

<option value="1">Alice (res)</option><script>res_members.push("1");</script>
<option value="2">Bob (com)</option><script>com_members.push("2");</script>
<option value="3">Carl (res)</option><script>res_members.push("3");</script>

另一个是寻找整数:

alert($.inArray(parseInt($(this).val()), res_members));
alert($.inArray(parseInt($(this).val()), com_members));

显然$.inArray使用运算符===将haystack元素与指针进行比较。