自动填充功能无法显示准确答案,显示所有选项

时间:2015-02-03 07:06:46

标签: php jquery ajax autocomplete

我有一个页面,我必须显示区域下拉选择状态下拉列表。然后显示post disices下拉选择distirict下拉列表。然后自动完成放置选择邮局下拉列表的输入框。

我成功完成了它。但是地方的自动填充输入框不会根据输入的关键字显示选项,天气会显示输入关键字的所有选项。

下面是我的php页面:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>jQuery UI Autocomplete - Default functionality</title>
    <link rel="stylesheet" href="js/jquery-ui.css">
    <script src="js/jquery.js"></script>
    <script src="js/jquery-ui.js"></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<?php
    $r = file('app_data/in.txt');
    $states = array();
    foreach($r as $value){
        $x = explode("\t",$value);
        //$india[] = array('pin'=>$x[1], 'place' => $x[2], 'state' => $x[3], 'dist' => $x[5] );
        $states[] = $x[3];
    }
    $states = array_unique($states);
    sort($states);
    echo '<select id="state">';
    foreach($states as $state){
        echo "<option> $state </option>";
    }
    echo '</select>';
    foreach($_POST as $post){
        echo $post;
    }
    echo '<select id="dist">';
    echo '</select>';

    echo '<select id="postoffice">';
    echo '</select>';

?>
<script>
    $('#state').focusout(function (){
        $.get('func-get-dist.php',{'state' : $(this).val()},function(data){
            $('#dist').html(data);
        });
    });
    $('#dist').focusout(function (){
        $.get('func-get-dist.php',{'state' : $('#state').val(),'dist' : $(this).val()},function(data){
            $('#postoffice').html(data);
        });
    });
    $('#postoffice').focusout(function (){
            var postoffice = $(this).val();
            $('#tags').autocomplete({
                source : ("func-get-dist.php?postoffice="+postoffice),
            });
    });


</script>
<div class="ui-widget">
    <label for="tags">Tags: </label>
    <input id="tags">
</div>
<div id="test">
<div id="test1">
</div>
</body>
</html>

下面是我的html-get-dist.php页面:

<?php 
if(isset($_GET['postoffice']) && !empty($_GET['postoffice'])){
    $postoffice = $_GET['postoffice'];
    $r = file('app_data/in.txt');
    $places = array();
    foreach($r as $value){
        $x = explode("\t",$value);
        if(strtolower($x[7]) == $postoffice){
            $places[] = strtolower(trim($x[2]));
        }
    }
    $places = array_unique($places);
    sort($places);
    echo json_encode($places);
}elseif(isset($_GET['state']) && !empty($_GET['state'])){
    if(isset($_GET['dist']) && !empty($_GET['dist'])){
        $state = $_GET['state'];
        $dist = $_GET['dist'];
        $r = file('app_data/in.txt');
        $posts = array();
        foreach($r as $value){
            $x = explode("\t",$value);
            if(($x[3] == $state) && ($x[5] == $dist)){
                //echo $x[6].'-'.$x[7].'-'.$x[8].'<br>';
                $posts[] = $x[7];
            }
        }
        $posts = array_map('strtolower',$posts);
        $posts = array_unique($posts);
        sort($posts);

        foreach($posts as $postoffice){
            echo '<option>'.$postoffice.'</option>';
        }
    }else{
        $state = $_GET['state'];
        $r = file('app_data/in.txt');
        $dists = array();
        foreach($r as $value){
            $x = explode("\t",$value);
            if($x[3] == $state){
                $dists[] = $x[5];
            }
        }
        $dists = array_unique($dists);
        sort($dists);

        foreach($dists as $dist){
            echo '<option>'.$dist.'</option>';
        }
    }
}
?>

1 个答案:

答案 0 :(得分:0)

您将userinput与整个值进行比较,尝试使用与用户输入的字符数相同的字符进行比较:

foreach($r as $value){
    $x = explode("\t",$value);
    $charCount = strlen($postoffice);
    if(strtolower(substr($x[7], $charCount)) == strtolower($postoffice)){
        $places[] = strtolower(trim($x[2]));
    }
}

编辑:我花了一些时间来弄明白,但我认为我有解决方案。您的代码中有2个错误:

  • 在js中,您可以使用var postoffice = $(this).val();获取选择的值,但.val()会返回所选的选择索引,而不是所选文本。
  • 您将选定的邮局与$x[7]进行比较,这是您数据中第8个标签分隔的列,如果我的计数正确,那么您只有7列。

所以我猜你在这里将undefined0进行比较,然后返回true

if(strtolower($x[7]) == $postoffice){

要解决此问题,请按以下方式获取js中的值:

 var postoffice = $("option:selected", this).text();

...并在php比较中使用正确的索引。