点击建议不要替换文本框中的好值

时间:2016-06-07 20:32:34

标签: javascript php mysql ajax

基本上,我有一个搜索框,用于将数据库的结果建议为用户类型。它看起来像这样: Example
我在文件中使用ajax作为用户类型进行实时搜索:

<input name="estab" id="estab" type="text" class="estab" />
<div id="result"></div>
<script>
            $("#estab").on("input", function(){
                $estab = $("#estab").val();
                if ($estab.length > 0){ 
                    $('#result').show();
                    $.get("res.php", {"estab":$estab},function($data){
                        $("#result").html($data);
                })
            }
            });
<script>

然后在另一个文件(res.php)中我有一个sql请求,我显示结果。我还有'onclick'功能来替换文本框中的建议:

while($result=$data->fetch_assoc()){
    $sortie[] = $result['school'];
}
$sortie2=array_unique($sortie);
echo '<ul>';
foreach($sortie2 as $value){

    echo "<script>
            function fill(){
            document.getElementById('estab').value = '$value';
            $('#result').hide();
            }
        </script>";
    echo "<li onclick='fill()'><b>$value</b></li>";
}
echo '</ul>';

我的问题是:当我点击任何建议时,它始终是文本框中替换的最后一个选项,在本例中为“华盛顿大学”。

我一直试图解决这个问题2天了,我找不到解决方案。

非常感谢任何帮助。感谢

更新

找到解决方案,如果有人有兴趣,这就是我在res.php中所做的:

while($result=$data->fetch_assoc()){
?>
<li onclick='fill("<?php echo $result['school']; ?>")'><?php echo $result['school'];?></li>
<?php
}
?>
</ul>

并在第一个文件中:

<script>

        function fill(val){
            $('#estab').val(val);
            $('#result').hide();
        }
            $("#estab").on("input", function(){
                $estab = $("#estab").val();
                if ($estab.length > 0){ 
                    $('#result').show();
                    $.get("res.php", {"estab":$estab},function($data){
                        $("#result").html($data);
                })
            }
            });
        </script>

2 个答案:

答案 0 :(得分:0)

我不会在这里使用onclick方法。我会使用jQuery将事件分配给列表项。但是,如果你必须,在你的onclick方法中,尝试传递this.value,如下所示:

<li onclick="fill(this.value)"><b>$value</b></li>

然后你的fill()方法就像这样:

function fill(val){
    $('#estab').val(val);
    $('#result').hide();
}
编辑:您正在混合纯JavaScript和jQuery代码。我用jQuery等效替换了你的普通JS行。

此外,如果要在添加LI的同一循环中添加fill()方法,则添加多个填充方法,这是不正确的。只需在同一个脚本标记中添加一次即可。

<script>
     function fill(val){
         $('#estab').val(val);
         $('#result').hide();
     }

    $("#estab").on("input", function(){
            $estab = $("#estab").val();
            if ($estab.length > 0){ 
                $('#result').show();
                $.get("res.php", {"estab":$estab},function($data){
                    $("#result").html($data);
            })
        }
    });
<script>

答案 1 :(得分:0)

echo "<script>
        function fill(newValue){
        document.getElementById('estab').value = '" + newValue + "'" + ;
      "  $('#result').hide();
        }
    </script>";

echo '<ul>';
foreach($sortie2 as $value){
    echo "<li onclick='fill($value)'><b>$value</b></li>";
}
echo '</ul>';