Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Jquery ui 如何使用jqueryui取消自动完成?_Jquery Ui_Autocomplete_Jquery Ui Autocomplete - Fatal编程技术网

Jquery ui 如何使用jqueryui取消自动完成?

Jquery ui 如何使用jqueryui取消自动完成?,jquery-ui,autocomplete,jquery-ui-autocomplete,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,我有一个输入字段,它附带了一个ajax数据源autocomplete 我有一个输入字段的keyup处理程序,它查找按enter的人,当他们按enter时,它会触发单击搜索按钮,ajax会在另一个div中加载一些数据 问题是,如果此人速度很快,键入并按enter键,自动完成功能仍然会弹出 我尝试了以下方法: 正在添加$'autocomplete'。autocomplete'close'。这不起作用,大概是因为自动完成尚未打开。如果我输入,等待自动完成出现,然后按enter键,它会正确关闭它 正在添

我有一个输入字段,它附带了一个ajax数据源autocomplete

我有一个输入字段的keyup处理程序,它查找按enter的人,当他们按enter时,它会触发单击搜索按钮,ajax会在另一个div中加载一些数据

问题是,如果此人速度很快,键入并按enter键,自动完成功能仍然会弹出

我尝试了以下方法:

正在添加$'autocomplete'。autocomplete'close'。这不起作用,大概是因为自动完成尚未打开。如果我输入,等待自动完成出现,然后按enter键,它会正确关闭它

正在添加$'autocomplete'。autocomplete'destroy'。这是可行的,但是如果我返回字段尝试另一个搜索,自动完成就不再有效了

因此,我想要的是一种取消任何挂起的请求并关闭自动完成(如果已打开)的方法,但不禁用或销毁它

编辑:代码示例不是我真正的代码,只是存根来演示问题。文件名是scratch.php

<?php
// Stub for search results
if ($_GET['search'])
{
    print "Search results for ".$_GET['search']." here";
    exit();
}

// Simulated DB search
if ($_GET['term'])
{
    print '[{"label":"A 1"},{"label":"A 2"},{"label":"A 3"},{"label":"A 4"}]';
    exit();
}
?>
<html>
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
    <link type="text/css" href="http://code.jquery.com/ui/1.10.1/themes/redmond/jquery-ui.css" rel="stylesheet" />
    <script language='javascript'>
    $(document).ready(function() {
        $('#searchfor').on('keyup',function(e) {
            if (e.which == 13) $('#search').trigger('click');
        });
        $('#searchfor').autocomplete({
            source: "/scratch.php",
            minLength: 2,
            select: function( event, ui ) {
                $('#searchfor').val(ui.item.value);
                $('#search').trigger('click');
            }
        });
        $('#search').on('click',function() {
            try
            {
                // Cancel any pending autocompletes without destroying the autocomplete completely here.
                // This currently doesn't work
                $('#searchfor').autocomplete("close");
            }
            catch(e)
            {
                // Do nothing except prevent an error
            }
            $('#results').load('scratch?search='+encodeURIComponent($('#searchfor').val()));
        });
    });
    </script>
</head>
<input id='searchfor' /> <input id='search' type='button' value='search' />
<div id='results'></div>
</html>

一种方法是使输入失去焦点。您可以使用。这样做怎么样:

JAVASCRIPT:

$(document).ready(function() {
        $('#searchfor').on('keyup',function(e) {
            if (e.which == 13) $('#search').trigger('click');
               $('#searchfor').blur();
        });
        $('#searchfor').autocomplete({
            source: "/scratch.php",
            minLength: 2,
            select: function( event, ui ) {
                $('#searchfor').val(ui.item.value);
                $('#search').trigger('click');
            }
        });
        $('#search').on('click',function() {
            $('#results').load('scratch?search='+encodeURIComponent($('#searchfor').val()));
        });
    });
演示:

假设您有一个单页应用程序

您可以使用
在jQuery UI的当前版本中,您可以在向数据源发出请求之前使用搜索事件进行一些检查

设自动完成数据=[ 动作脚本, AppleScript, Asp, 基本的 C C++, Clojure, COBOL, 冷落, 二郎, Fortran, 好极了, 哈斯克尔, JAVA JavaScript, 口齿不清, Perl, PHP, 333333, 222222, 111111, 123456 ]; $“输入”。自动完成{ 资料来源:自动完成数据, 搜索:functione,u{ 设值=e.target.value; //如果值为整数,则停止事件继续。 如果Number.isIntegerparseIntvalue{ e、 防止违约; } }, };
请提供代码和/或example@Dom-添加了代码段。我不确定如何用JSFIDLE模拟服务器端的东西,所以我只是粘贴了一个简化的代码片段来演示手头的问题。增加延迟并使用disable方法而不是close方法怎么样?这很有效。我原以为会有自动完成类调用取消它,但这是罚款。谢谢