快速输入按键

时间:2014-09-11 19:40:09

标签: javascript php mysql

  

$(' #country_name')。autocomplete({           source:function(request,response){               $就({                   url:' autofill.php',                   dataType:" json",                   数据:{                       name_startsWith:request.term,                       输入:$('#search_variable')。val()                   },                   成功:函数(数据){                       //警报(数据)                       响应($ .map(data,function(item){                           返回{                               label:item,                               值:项目                           };                       }));                   }               });

   },
    autoFocus: true,
    minLength: 3
});

autofill.php

  

3 个答案:

答案 0 :(得分:1)

不应该返回结果,因为你永远不会启动searchFilter,如果你使用回车,你会看到if (event.keyCode == 13) return false;

keyCode 13 == ENTER,这意味着你在调用searchFilter();之前返回false。 删除if (event.keyCode == 13) return false;

答案 1 :(得分:1)

你需要使用"承诺超时"像这样:

var searchTimer  = null;
var searchInput  = $('#country_name');
var searchResult = $('.contentText');

searchInput.on('keyup', function() {
    clearTimeout(searchTimer);
    searchTimer = setTimeout(function() {
        var val = $.trim(searchInput.val());
        if (val) {
            $.ajax({
                url: 'searchorder.php?search_value=' + val,
                cache: false, // deny cache GET requests
                success: function(data) {
                    searchResult.html(data);
                }
            });
        }
    }, 300);
});

答案 2 :(得分:1)

演示http://jsfiddle.net/togr18Lb/1/

好的,这是你的解决方案。

在制作新请求时中止任何先前的请求,以免使服务器泛滥。

等待用户停止输入,以减慢请求速度。

按钮有效,所以我们需要做的就是绑定keyup并更改输入字段以触发该按钮,而不是重复代码。我们使用jQuery执行此操作,而不是使用onkeyup=""

为了确保在按下回车键时我们没有让不必要的请求返回false是正确的,但我们使用.preventDefault()代替。

<input name="search_value" id="country_name"  />

的jQuery

var searchFilterXhr;
var searchTimeout;

$(function(){
    // bind keyup (and change) to trigger the button that causes the search
    $('#country_name').on('keyup change', function(e){
        // prevent any default action, like submitting a form on enter.
        e.preventDefault();
        // if the text field has changed, only then do we search
        if ($(this).data('last-value') != $(this).val()) $('#button').trigger('click');
        // remember the previous value so that we can check it's changed
        $(this).data('last-value', $(this).val());

    });
});

function searchFilter(){
    //alert("");
    $("#loader").show();
    var search_variable = $("#search_variable").val();
    var search_value = $("#country_name").val();
    //alert(search_value);
    if (searchFilterXhr) searchFilterXhr.abort();
    clearTimeout(searchTimeout);
    searchTimeout = setTimeout(function(){
        searchFilterXhr = $.ajax({
            url: 'searchorder.php?act=save&search_variable=' + search_variable + '&search_value=' + search_value,
            success: function(data) {
                //alert(data);
                $("#loader").hide();
                $(".contentText").html(data);
                // $("#feedbackcommon"+act_id).show();
            }
        });
    }, 500);
}