Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使jQuery自动完成列表在选择选项后显示焦点上的所有选项和隐藏?_Php_Jquery_Jquery Ui_Jquery Ui Autocomplete_Onfocus - Fatal编程技术网

Php 如何使jQuery自动完成列表在选择选项后显示焦点上的所有选项和隐藏?

Php 如何使jQuery自动完成列表在选择选项后显示焦点上的所有选项和隐藏?,php,jquery,jquery-ui,jquery-ui-autocomplete,onfocus,Php,Jquery,Jquery Ui,Jquery Ui Autocomplete,Onfocus,我有一个带有自动完成功能的表单,它启动搜索“onfocus”,并在用户单击搜索字段时显示选项列表,即使他们没有输入任何内容 问题在于,自动完成需要使用键盘(向下箭头后跟tab/return或双击)选择选项。我的第一个想法是,单击一次会使焦点保持在搜索字段中,从而使自动完成保持可见。但是,搜索字段在第二次单击后保持聚焦,但自动完成在第二次单击后消失 有什么想法吗 <script> $(document).ready(function() { var autocomplete_

我有一个带有自动完成功能的表单,它启动搜索“onfocus”,并在用户单击搜索字段时显示选项列表,即使他们没有输入任何内容

问题在于,自动完成需要使用键盘(向下箭头后跟tab/return或双击)选择选项。我的第一个想法是,单击一次会使焦点保持在搜索字段中,从而使自动完成保持可见。但是,搜索字段在第二次单击后保持聚焦,但自动完成在第二次单击后消失

有什么想法吗

<script>
$(document).ready(function() {

    var autocomplete_focus = function(){           
        if ($(this).val().length == 0) {
            $(this).autocomplete("search", "%");
        }
    }   

    $( ".autocomplete" ).autocomplete({
            source: "../../db/autocomplete_list.php",
            minLength: 0
    });

    $( ".autocomplete" ).focus(autocomplete_focus);

});
</script>

$(文档).ready(函数(){
var autocomplete_focus=function(){
if($(this).val().length==0){
$(this).autocomplete(“search”、“%”);
}
}   
$(“.autocomplete”).autocomplete({
来源:“../db/autocomplete_list.php”,
最小长度:0
});
$(“.autocomplete”).focus(autocomplete\u focus);
});
我知道以前有人在这里发过帖子;但是,建议的解决方案不适用于我。

此方法:

$( ".autocomplete" ).autocomplete({
        source: "../../db/autocomplete_list.php",
        minLength: 0
}).focus(function(){            
        $(this).trigger('keydown.autocomplete');
});
对我有用

资料来源:


不确定这是否是一个可接受的解决方案,但一种方法是用聚焦值填充
输入。这将防止菜单显示两次:

/* snip: */
focus: function (event, ui) {
    this.value = ui.item.value;
},
这里有一个例子:

尝试删除事件处理程序的焦点,以查看问题中的症状。

尝试此操作。 这段代码实际上删除了存在问题的keydown.autocomplete。相反,每次您关注文本字段时,它都会进行搜索

$( ".autocomplete" ).autocomplete({
    source: "../../db/autocomplete_list.php",
    minLength: 0
}).focus(function(){ 
    $(this).data("autocomplete").search($(this).val());
}
但是,如果您希望在选择条目后立即取消下拉列表,请添加此行

$( ".autocomplete" ).autocomplete({
    source: "../../db/autocomplete_list.php",
    minLength: 0
}).focus(function(){

    **if ($(this).autocomplete("widget").is(":visible"))
       return;**
    $(this).data("autocomplete").search($(this).val());
}

当控件在鼠标单击的情况下接收回焦点时,如果下拉列表已经显示,它不会显示全部焦点。这就是这段代码的作用

这是我找到的最好的解决方案;但是,这仅显示“第一”焦点上的所有值。当我在页面加载后关注搜索字段时,它会显示所有的值。但是,如果我单击关闭搜索字段(移除焦点),然后再次单击返回,它不会再次拉出完整列表。你看到问题了吗?是的,这似乎有效;然而,由于某种原因,这个问题似乎只发生在远程源上。啊,好的。我会再挖一些。谢谢!见下面Alex的回答。这也是我最接近的一次;然而,这并不完美!漂亮的解决方案……你是最好的!:)谢谢@迈克尔:没问题!很乐意帮忙。这实际上应该在小部件本身中修复。