使用上下箭头高亮从PHP AJAX搜索中获取的文本。

4
我正在尝试在从Ajax结果集获取的搜索结果中切换。实际上,问题出在onkeyup和onkeydown上,它们无法在搜索结果中向上和向下移动,这非常令人沮丧。但是,我尝试的代码如下:
<input type="search" class="searchnews" name="news" autocomplete="off" />
<div id="suggestion-list"></div>
<style>
 .selected {background: #EAEAEA;}
</style>
<script>
  $('.searchnews').keyup(function(e){
    $('input[name="hidden_news"]').val('');                         
    $('input[name="hidden_news"]').val($.trim($(this).val()));
    if(e.keyCode!=40 && e.keyCode!=38){
            var str = $(this).val();
        $.ajax({
            type:'POST',
            url:'ajax/getnews.php',
            data:'str='+str,
            success: function(data){
                if(data.length <= 2){
                    $("#suggestion-list").css('display','none');
                }
                else{
                    $("#suggestion-list").html('');
                    $("#suggestion-list").css('display','block');
                    $("#suggestion-list").append(data);
                }
            }
        });
    }

});
  $(document).keydown(function(e){
    if (e.keyCode == 38) { 
        var selected = $(".selected");
        $("#suggestion-list ul li").removeClass("selected");
        if (selected.prev().length == 0) {
            selected.siblings().last().addClass("selected");
        } else {
            selected.prev().addClass("selected");
        }
    }
    if (e.keyCode == 40) {
        var selected = $(".selected");
        $("#suggestion-list ul li").removeClass("selected");
        selected.next().addClass("selected");
        if (selected.next().length == 0) {
            selected.siblings().first().addClass("selected");
        } else {
            selected.next().addClass("selected");
        }
    }   
  });
</script>

**getnews.php**

<?php
    if(isset($_POST['str']) && $_POST['str']!=''){
        $str=$_POST['str'];
        $str1 = explode(' ',$str);
        foreach($str1 as $st){
        $sql[] =" title like '%".$st."%'";
        }
        $result=mysql_query("SELECT * FROM news WHERE ".implode('and',$sql)." or  title like '%".$str."%'");
        //$result=mysql_query("SELECT * FROM newsupdate WHERE title LIKE \"%$str%\" and status='1' ORDER BY published_date DESC");
        $i=0;
        if(mysql_num_rows($result) > 0){
                    echo '<ul>';
        while($row=mysql_fetch_array($result)){
        $i++;
        if($i==1){
        ?>
                <li class="selected"><a style="color:#030303;" target="_blank" >
                <span class="text"><?php echo preg_replace("/$str/i",'<span class="highlight">'.$str.'</span>',$row['title']); ?></span>
                </a></li>
        <?php   
        }
        else{
        ?>
            <li><a style="color:#030303;" target="_blank">
            <span class="text"><?php echo preg_replace("/$str/i",'<span class="highlight">'.$str.'</span>',$row['title']); ?>
            </span>
            </a></li>
        <?php
        }   
        }
        echo '</ul>';
        }
    }
?>

请帮我纠正这个问题。谢谢。

你看过JQuery UI Autocomplete吗?我相信它能满足你想要实现的功能。https://jqueryui.com/autocomplete/#remote - Devin H.
@DevinH,谢谢你,兄弟。你的参考资料对我帮助很大,但是我正在尝试使用jQuery手动完成它。 - Vipin
代码看起来应该可以工作。你能添加警告/控制台日志语句并查看是否触发了这些事件吗? - Parth Shah
@ParthShah 是的,你说得对。代码是可以工作的,但问题在于当我按下键盘时,选定的li元素会跳到它的下一个li元素的下一个位置,而不是它的下一个li元素。 - Vipin
1个回答

2

Jason,请你把我已经注释掉的代码行删除,并告诉我当你这样做时会发生什么?

$(document).keydown(function(e){
    if (e.keyCode == 38) { 
        var selected = $(".selected");
        $("#suggestion-list ul li").removeClass("selected");
        if (selected.prev().length == 0) {
            selected.siblings().last().addClass("selected");
        } else {
            selected.prev().addClass("selected");
        }
    }
    if (e.keyCode == 40) {
        var selected = $(".selected");
        $("#suggestion-list ul li").removeClass("selected");
        //selected.next().addClass("selected");
        if (selected.next().length == 0) {
            selected.siblings().first().addClass("selected");
        } else {
            selected.next().addClass("selected");
        }
    }   
});

谢谢伙计。看起来你的修正代码有效。 - Vipin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接