Javascript JQuery自动完成事件的新值

Javascript JQuery自动完成事件的新值,javascript,jquery-ui,autocomplete,Javascript,Jquery Ui,Autocomplete,我有以下代码: container.autocomplete({ minLength: 2, source: function(request, response) { $.ajax({ type : 'POST', url: HOST + "/lib/gets/getjsonclients.php", dataT

我有以下代码:

container.autocomplete({
        minLength: 2,
        source: function(request, response) {
                $.ajax({
                    type : 'POST',
                    url: HOST + "/lib/gets/getjsonclients.php",
                    dataType: "json",
                    data: {
                        q: request.term
                    },
                    success: function(data) {
                        ajaxCache[cachedTerm] = data;
                        response($.map(data, function(item) {
                            return {
                                label: item.value,
                                value: item.value
                            }
                        }));
                    }
                });
        },
        select: function(event, ui) {
            alert(ui.item.value);
            this.close
        },

        //change: function(event, ui) {
        //   alert($(this).val());
        //}, 

        open: function() {
        },

        close: function() {
        }
 });
我想在键入一个新值时捕捉enter键事件,而不是我在选择列表中已有的值

我已尝试使用.result事件,但出现错误:Uncaught TypeError:对象没有使用以下代码的方法“result”:

    container.result(function(event, data, formatted) {
        alert($(this).val());
    });
更改:事件工作正常,但只有在我失去对自动完成的关注并且需要在按下enter键时完成后才会触发


谢谢您的回答。

您应该将容器绑定到按键上,并抓住未测试的enter键,但该键应该可以工作:

$(container).keypress(function(event) {
    if(event.which == 13) {
        $(this).autocomplete('search');
    }
});

您应将容器绑定到按键,并捕获未测试的enter键,但应能工作:

$(container).keypress(function(event) {
    if(event.which == 13) {
        $(this).autocomplete('search');
    }
});
我使用这个解决方案。 但是,如果有办法在一个事件被触发时取消该事件的效果,并再次激活该事件,请让我知道

  var oneEventFired = false;
  container.autocomplete({
        minLength: 2,
        source: function(request, response) {
                $.ajax({
                    type : 'POST',
                    url: HOST + "/lib/gets/getjsonclients.php",
                    dataType: "json",
                        data: {
                        q: request.term
                    },
                    success: function(data) {
                        ajaxCache[cachedTerm] = data;
                        response($.map(data, function(item) {
                            return {
                                label: item.value,
                                value: item.value
                            }
                        }));
                    }
                });
        },
        select: function(event, ui) {
            oneEventFired = true;
            alert(ui.item.value);
            this.close
        },    
        open: function() {
        },    
        close: function() {
        }
 })
 .keypress(function(e) {
        if (!oneEventFired) {
            // activate when the enter key is hit
            if (e.keyCode === 13) 
            {
                alert("key" + $(this).val());
            }
        } else {
            oneEventFired = false;
        }
 });
谢谢你的帮助

我使用这个解决方案。 但是,如果有办法在一个事件被触发时取消该事件的效果,并再次激活该事件,请让我知道

  var oneEventFired = false;
  container.autocomplete({
        minLength: 2,
        source: function(request, response) {
                $.ajax({
                    type : 'POST',
                    url: HOST + "/lib/gets/getjsonclients.php",
                    dataType: "json",
                        data: {
                        q: request.term
                    },
                    success: function(data) {
                        ajaxCache[cachedTerm] = data;
                        response($.map(data, function(item) {
                            return {
                                label: item.value,
                                value: item.value
                            }
                        }));
                    }
                });
        },
        select: function(event, ui) {
            oneEventFired = true;
            alert(ui.item.value);
            this.close
        },    
        open: function() {
        },    
        close: function() {
        }
 })
 .keypress(function(e) {
        if (!oneEventFired) {
            // activate when the enter key is hit
            if (e.keyCode === 13) 
            {
                alert("key" + $(this).val());
            }
        } else {
            oneEventFired = false;
        }
 });

谢谢你的帮助

谢谢,现在一切正常,但问题是,当我在选择列表中的一个值上按enter键时,会触发事件select,然后还会触发按键事件。在这种情况下,我只想解雇其中一人。你知道我怎样才能阻止他们中的一个吗?或者我可以使用一个局部变量来验证这一点。add after.autocomplete'search':event.stoppropagation我已经按照您所说的那样尝试过了,但不起作用。。。我已经读过StopperPagation,该方法停止向父元素冒泡事件,防止任何父处理程序收到事件通知。但是,我对autocomplete和keypress使用相同的容器,如下所示:。问题是我如何停止从同一容器中触发一个又一个事件,而不是从子或父html标记。我不认为有一种简单的方法可以做到这一点:你应该尝试重写你的js,考虑到这一需要,即改变你附加处理程序的方式。您可以尝试跟踪在按下enter键时是否调用了源函数,使用var enterKey=false,在按键处理程序中将其设置为true,在源函数中检查true,最后在源函数末尾将其设置为false。谢谢,现在可以了,但问题是,当我在选择列表中的一个值上按enter键时,会触发事件select,然后还会触发按键事件。在这种情况下,我只想解雇其中一人。你知道我怎样才能阻止他们中的一个吗?或者我可以使用一个局部变量来验证这一点。add after.autocomplete'search':event.stoppropagation我已经按照您所说的那样尝试过了,但不起作用。。。我已经读过StopperPagation,该方法停止向父元素冒泡事件,防止任何父处理程序收到事件通知。但是,我对autocomplete和keypress使用相同的容器,如下所示:。问题是我如何停止从同一容器中触发一个又一个事件,而不是从子或父html标记。我不认为有一种简单的方法可以做到这一点:你应该尝试重写你的js,考虑到这一需要,即改变你附加处理程序的方式。您可以尝试跟踪在按下enter键时是否调用了源函数,使用var enterKey=false,在按键处理程序中将其设置为true,在源函数中检查true,最后在源函数末尾将其设置为false。