1

PHP Jquery クックブックからこのチュートリアルを実行しようとしていますが、最初のコンボ ボックスに国データが入力されておらず、空です! データベースに 4 つのテーブルがあり、それらをチェックしましたが、すべて問題ありません! テーブルは次のとおりです: Country、States、Towns、および Towninfo

私のhtmlには次のものがあります:

<html>
<head>
</head>
<body>
    <ul>
        <li>
            <strong>Country</strong>
            <select id="countryList">
                <option value="">select</option>
            </select>
        </li>
        <li>
            <strong>State</strong>
            <select id="stateList">
                <option value="">select</option>
            </select>
        </li>
        <li>
            <strong>Town</strong>
            <select id="townList">
                <option value="">select</option>
            </select>
        </li>
    </ul>
    <p id="information"></p>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function()
        {
       $('select').change(getList);
            getList();
            function getList()
            {
                var url, target;
                var id = $(this).attr('id');
                var selectedValue = $(this).val();
                switch (id)
                {
                    case 'countryList':
                        if(selectedValue == '') return;
                        url = 'results.php?find=states&id='+ selectedValue;
                        target = 'stateList';
                    break;

                    case 'stateList':
                        if($(this).val() == '') return;
                        url = 'results.php?find=towns&id='+ selectedValue;
                        target = 'townList';
                    break;

                    case 'townList':
                        if($(this).val() == '') return;
                        url = 'results.php?find=information&id='+ selectedValue;
                        target = 'information';
                    break;

                    default:
                        url = 'results.php?find=country';
                        target = 'countryList';
                }
                $.get(
                    url,
                    { },
                    function(data)
                    {
                        $('#'+target).html(data);
                    }
                )
            }
        });
    </script>
</body>
</html>

そして私が持っているphpファイルで:

 <?php
 $mysqli = new mysqli('localhost', 'root', '', 'chain');
 $find = $_GET['find'];
  switch ($find)
  {
case 'country':
$query = 'SELECT id, countryName FROM country';
break;

    case 'states':
$query = 'SELECT id, stateName FROM states WHERE countryId='.$_GET['id'];
break;

    case 'towns':
$query = 'SELECT id, townName FROM towns WHERE stateId='.$_GET['id'];
break;
case 'information':
    $query = 'SELECT id, description FROM towninfo WHERE townId='.$_GET['id'] .' LIMIT 1';
break;
    }
    if ($mysqli->query($query)) 
    {
$result = $mysqli->query($query);
if($find == 'information')
{
    if($result->num_rows > 0)
    {
        $row = $result->fetch_array();
        echo $row[1];
    }
    else
    {
        echo 'No Information found';
    }
}
else
{
     ?>
    <option value="">select</option>
     <?php          
    while($row = $result->fetch_array()) 
    {
      ?>        
        <option value="<?php echo $row[0]; ?>"><?php echo $row[1]; ?>         </option>     
      <?php         
    }
}
     }
     ?> 

本によると、ページが読み込まれた後に最初のコンボボックスを設定する必要がありますが、なぜ空なのかわかりません! なぜこれが起こっているのか教えてください!

4

1 に答える 1

0

呼び出し:getList();

ページが読み込まれた後は、値「this」の正しいコンテキストがないため、機能しません。

あなたは使用を試みることができます:

$('select').trigger("change");

getList();の代わりに 初めての読み込み

または別の方法で試してください。

$(document).ready(function(){
    $('select').change(getList);
    getList.call($('select'));
    function getList(){...}
}

これは正しいコンテキストを設定する必要があります(ただし、フィドルを作成しようとしていないため、機能するかどうかは100%わかりません)。

于 2012-12-13T07:40:49.897 に答える