JQuery自动完成事件的新值

时间:2011-01-18 10:11:09

标签: javascript jquery-ui autocomplete

我有以下代码:

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() {
        }
 });

当我输入一个新值(我在选择列表中已有的其他值)时,我想捕获回车键事件。

我尝试过使用.result事件,但是我遇到了错误:未捕获TypeError:对象#没有方法'结果'使用代码:

    container.result(function(event, data, formatted) {
        alert($(this).val());
    });

更改:事件正常工作但只有在我将注意力放在自动完成上后才会触发,我需要在按下回车键时完成它

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

您应该将容器绑定到keypress并捕获回车键(未经测试但应该有效):

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

答案 1 :(得分:2)

我使用这个解决方案。 但是,如果有一种方法可以在一个事件被解雇时取消一个事件的效果,并再次激活该事件,请告诉我。

  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;
        }
 });

感谢您的帮助!