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自动完成防止退格搜索_Jquery_Jquery Ui - Fatal编程技术网

JQuery UI自动完成防止退格搜索

JQuery UI自动完成防止退格搜索,jquery,jquery-ui,Jquery,Jquery Ui,当用户点击退格键时,将触发搜索。我怎样才能防止这种情况发生?我尝试了以下代码,但它似乎只有在第二次按下backspace键后才起作用 var $cached_input = $("#myinput"); $cached_input.autocomplete({ autoFocus: true, delay: 700, open: function (event, ui) { $(this).autocomplete("widget")

当用户点击退格键时,将触发搜索。我怎样才能防止这种情况发生?我尝试了以下代码,但它似乎只有在第二次按下backspace键后才起作用

var $cached_input = $("#myinput");

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        var params = { searchTerm: request.term }

        //ajax call made here to load the data...
    },
    minLength: minChars
}).keydown(function (event) {
    if (event.keyCode == 8) {
        $cached_input.autocomplete("disable");
    } else {
        $cached_input.autocomplete("enable");
    }
});
编辑 作为一种解决方法,我在每个注释旁边实现了以下更改,它似乎完成了这项工作。如果存在更好的解决方案,仍然可以接受

var $cached_input = $("#myinput");
var performSearch = true; //added variable to determine if I should search

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        if (performSearch) { //check variable before performing search
            var params = { searchTerm: request.term }

            //ajax call made here to load the data...
        }
    },
    minLength: minChars
}).keydown(function (event) {
    if (event.keyCode == 8) {
        performSearch = false; //do not perform the search
    } else {
        performSearch = true; //perform the search
    }
});
var $cached_input = $("#myinput"); var performSearch = true; //added variable to determine if I should search

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        if (performSearch) { //check variable before performing search
            var params = { searchTerm: request.term }

            //ajax call made here to load the data...
        }
    },
    minLength: minChars }).keydown(function (event) {
    if (event.keyCode == 8) {
        performSearch = false; //do not perform the search
    } else {
        performSearch = true; //perform the search
    } });
试试这个代码

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        var params = { searchTerm: request.term }

        //ajax call made here to load the data...
    },
    minLength: minChars
}).keyup(function (e) {
            if (e.keyCode === 13) {
                $cached_input.autocomplete("enable");
                $cached_input.autocomplete("search", $cached_input.val());
            }
            else if ((e.keyCode == 8) || (this.value == "") || (e.keyCode == 46)) 
            {
                $cached_input.autocomplete("disable");
            }
我愿意

$(document).on('keyup cut paste change keydown', 'input[data-input_type="autocomplete"]', function (e) {
 $(this).autocomplete({
        source: mySource();
}

通过这种方式,您可以控制在这种情况下触发自动完成的事件:keyup、cut、paste和keydown。其中data-input_type=autocomplete是输入的一个个人标记,仅表示它属于DOM元素的autocomplete组,但您可以通过类调用它,也可以根据需要调用它。希望这对某人有所帮助。

作为一种解决方法,我在每个注释旁边实施了以下更改,似乎可以完成这项工作。如果存在更好的解决方案,仍然可以接受

var $cached_input = $("#myinput");
var performSearch = true; //added variable to determine if I should search

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        if (performSearch) { //check variable before performing search
            var params = { searchTerm: request.term }

            //ajax call made here to load the data...
        }
    },
    minLength: minChars
}).keydown(function (event) {
    if (event.keyCode == 8) {
        performSearch = false; //do not perform the search
    } else {
        performSearch = true; //perform the search
    }
});
var $cached_input = $("#myinput"); var performSearch = true; //added variable to determine if I should search

$cached_input.autocomplete({
    autoFocus: true,
    delay: 700,
    open: function (event, ui) {
        $(this).autocomplete("widget")
         .find("ui-menu-item-alternate")
          .removeClass("ui-menu-item-alternate")
         .end()
         .find("li.ui-menu-item:odd a")
          .addClass("ui-menu-item-alternate");
    },
    source: function (request, response) {
        if (performSearch) { //check variable before performing search
            var params = { searchTerm: request.term }

            //ajax call made here to load the data...
        }
    },
    minLength: minChars }).keydown(function (event) {
    if (event.keyCode == 8) {
        performSearch = false; //do not perform the search
    } else {
        performSearch = true; //perform the search
    } });

是否有一个在选择时提交选项可能会将退格检测为选择?当我将您在问题中提供的逻辑合并时,我没有看到这种情况发生。你自己来看看:你确定你在问题中添加了所有相关代码吗?@杰克先生,我不确定我是否理解你的问题。有一个select事件,但当从菜单中选择某个项目时会触发,此时为时已晚。@dark knight在您提供的演示中不会发生此事件,因为我删除了加载源属性中数据的ajax调用。我没有提供该代码,因为我不认为它与手头的问题有关,因为当代码执行时已经太晚了。自动完成似乎是一个插件。它会自动提交搜索吗?当按下退格键时,它仍会执行搜索。此外,在按下我不想要的enter键之前,最初不会执行搜索。然后删除e.keyCode===13条件部分,仅使用keyCode==8部分,这将留下我已经尝试过的内容,即如果keyCode==8调用disable correct?,而不是keypress try.keyupfunctione{ife.keyCode==8$tags.autocomplete disable else$tags.autocomplete enable};与以前的行为相同。第一次执行搜索时,以及随后的所有时间都没有执行搜索。我已经用我发现的可能解决方案编辑了我的问题。