2011-10-26 2 views
0

У меня есть код, который выглядит так. Значения select#member_id динамически добавляются PHP. Я пытаюсь определить, выбирает ли пользователь параметр res или com из списка, который будет определять, будет ли я динамически добавлять во втором раскрывающемся списке. С кодом как есть, я последовательно получаю -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> 

ответ

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.

Update: Почему ваш текущий код не работает

Это потому, что вы подталкивают целые числа в массив (с 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 сравнивает Стог элементы с иглой с помощью оператора ===.

+0

Очевидно, мне нужно больше кофе. – Jazzerus

+0

Если бы я мог снова подняться для вашего обновления, я бы это сделал. – Jazzerus

Смежные вопросы