2013-07-07 45 views
0

我正在嘗試將一個js var傳遞給一個php var,然後使用該php var來瀏覽並填充一個下拉列表。我可以看到,PHP變量得到正確的值,但list2和list3沒有被填充。動態下拉列表不能正常工作

如果我把字符串放在我自己的$list1 = 'somestring';它可以工作,但是當我使用$list1 = $_POST['choice'];它不起作用。

<script> 
$(document).ready(function(){ 
    $("#list1").change(function(){ 
     var selected = this.value; 
    $.post("my.php", { choice: selected }, function(data){ 
      alert(data); 
    }); 
    }); 
}); 
</script> 

<?php 
echo' 
<form name="menu"> 
<div> 
    <select name="list1" size="1" onchange="setOptions(document.menu.list1.options 
    [document.menu.list1.selectedIndex].value,document.menu.list2,document.menu.list3);"> 
    <option value=" " selected></option> 
    <option value="one">item1</option> 
    <option value="two">item2</option> 
    <option value="three">item3</option> 
    <option value="four">item4</option> 
    </select><br><br> 
    <select name="list2" size="1"onchange="setOptions(document.menu.list2.options 
    [document.menu.list2.selectedIndex].value,document.menu.list3,' ');"> 
    <option value=" " selected>Select an option</option> 
    </select><br><br> 
    <select name="list3" size="1"> 
    <option value=" " selected>Select an option</option> 
    </select><br> 
</div> 
</form>'; 
?> 

下拉列表

<script> 
    function setOptions(chosen, selbox, selbox2) 
    { 
    selbox.options.length = 0; 

    if (chosen == " ") 
    { 
    selbox.options[selbox.options.length] = new Option('Select an option',' '); 
    selbox2.options[selbox2.options.length] = new Option("Select an option"," "); 
    setTimeout(setOptions(' ',document.menu.list3),5); 
    } 

    if (chosen == "one") 
    { 
     showList2(selbox); 
    } 
    if (chosen == "two") 
    { 
     showList2(selbox); 
    } 
    if (chosen == "three") 
    { 
     showList2(selbox); 
    } 
    if (chosen == "four") 
    { 
     showList2(selbox); 
    } 

    //some code snipped 
    } 


    function showList2(selbox) 
    { 
    <?php 
    $n = 0; 
    $list1 = $_POST['choice']; 

    foreach($list[$list1] as $key => $value) 
    { 
     $key_array[$n] = $key; 
     $Lname[$n] = $list[$list1][$key]['name']; 

    $n++; 
    } 

    $jsArray = json_encode($key_array); 
    echo "var jsKeys = ". $jsArray . ";"; 
    $jsArray = json_encode($Lname); 
    echo "var jsNames = ". $jsArray . ";"; 
    ?> 

    for (var i=0;i<jsKeys.length;i++) 
    { 
    var result = selbox2.options[selbox2.options.length] = new Option(jsNames[i],jsKeys[i]); 

     if(i == jsKeys.length-1) 
     { 
     var result = setTimeout(setOptions(jsKeys[0],document.menu.list3,' '),5); 
     } 
    } 
    return(result); 
    } 
</script> 
+0

當JS功能火災,也就是你選擇的東西$ _POST全局時,才設置。否則保持空白。你壓制任何PHP錯誤? 在$ .post()數據前的JS中嘗試'console.log(selected)'並檢查Firebug或瀏覽器控制檯以查看值是什麼。您還可以通過檢查$ _POST數組中的內容來調試PHP'print_r($ _ POST)' –

+0

$ _POST正在獲得正確的值,我可以在彈出的警報中看到它。 – Gary

+0

你是對的一個PHP錯誤被壓制,因爲它沒有被設置功能被解僱之前。我用isset和它工作,謝謝。 – Gary

回答

0

當JS功能火災,即當你選擇從下拉列表中的東西的$_POST超全局,才設置。否則保持空白。

您可以檢查有什麼$ _POST陣列,使print_r($_POST)

通常情況下,我用一個實用的方法來從陣列中檢索數據:

function arrGet($array, $key, $default = NULL) 
{ 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

這將返回鍵或缺省值。使用這樣的:

if(arrGet($_POST, 'choice')){ 
    //do something 
} 

希望這有助於...

0
<script> 
$(document).ready(function(){ 
    $("#list1").change(function(){ 
     var selected = this.value; 
    $.post("my.php", { choice: selected }, function(data){ 
      alert(data); 
    }); 
    }); 
}); 
</script> 

,在$("#list1")#意味着ID的元素的亦宜。

<select name="list1" .....將其更改爲<select name="list1" id="list1".....>

+0

謝謝我補充說,但它仍然不工作 – Gary

+0

檢查控制檯。如果你在某個地方有錯誤。 – itachi

+0

我收到此錯誤。 的ReferenceError:setOptions沒有定義 [打破該誤差] \t setOptions(document.menu.list1.options 代碼 函數的onchange(事件){ setOptions(document.menu.list1.options [ document.menu.list1.selectedIndex] .value,document.menu.list2,document.menu.list3); } – Gary