在令牌之后触发的jQuery自动完成插件

时间:2010-12-30 16:34:25

标签: jquery autocomplete

我正在构建一个应用程序,并希望在textarea中进行自动完成,就像Twitter / Facebook使用@ [name]一样。但是,当我输入[TID:x]时,我想触发它​​,其中x是任意长度的整数。

看来Twitter / Facebook在你点击@符号后开始自动完成,然后发送文本数据后自动完成。有没有人知道jQuery UI插件(或任何其他插件)是否可以做这样的事情?

2 个答案:

答案 0 :(得分:5)

我已经为它创建了一个插件,它使用了jQuery-UI Autocomplete和Andrew的例子(感谢你)。

网址:https://github.com/experteer/autocompleteTrigger

演示:http://jsfiddle.net/dmattes/2YRgW/1/

$('input,textarea').autocompleteTrigger({
  triggerStart : '@',
  triggerEnd: '',
  source: [
    "Asp",
    "BASIC",
    "COBOL",
    "ColdFusion",
    "Erlang",
    "Fortran",
    "Groovy",
    "Java",
    "JavaScript",
    "Lisp",
    "Perl",
    "PHP",
    "Python",
    "Ruby",
    "Scala",
    "Scheme"
  ]
});

最佳, 丹尼尔

答案 1 :(得分:4)

这确实是可能的。您可以使用自动填充小部件的事件(searchselect)来完成此操作:

var triggered = false;
var trigger = "TDI:";

$("input").autocomplete({
    source: [...],
    search: function() {
        if (!triggered) {
            return false;
        }
    },
    select: function(event, ui) {
        var text = this.value;
        var pos = text.lastIndexOf(trigger);

        this.value = text.substring(0, pos + trigger.length) +
            ui.item.value;

        triggered = false;

        return false;
    },
    focus: function() { return false; },
    minLength: 0
}).bind("keyup", function() {
    var text = this.value;
    var len = text.length;
    var last;
    var query;
    var index;

    if (triggered) {
        index = text.lastIndexOf(trigger);
        query = text.substring(index + trigger.length);
        $(this).autocomplete("search", query);
    }
    else if (len >= trigger.length) {
        last = text.substring(len - trigger.length);
        triggered = (last === trigger);
    }
});

在这里演示:http://jsfiddle.net/andrewwhitaker/kCkga/

备注:

  • 这是非常有限的演示。如果您尝试在字符串中间自动完成它,它将无法工作。
  • 要完成此示例,您需要做一些工作,找出光标在输入字段中的位置,然后在那里插入文本
  • 可能还有其他错误,但我绝对认为这是可行的。希望这能让你开始。