2011-10-26 145 views
0

我有一些看起來像這樣的代碼。 PHP動態添加select#member_id的值。我試圖確定用戶是否從列表中選擇了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> 

回答

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使用運營商===針草垛元素進行比較。

+0

顯然我需要更多的咖啡。 – Jazzerus

+0

如果我可以再次爲你的更新upvote,我會的。 – Jazzerus

相關問題