javascript - 使用 contenteditable div 而不是 textarea 自动完成似乎不起作用

标签 javascript jquery-ui jquery-plugins jquery

我正在使用 Andrew Whitaker 的自动完成插件,该插件也在这个问题中被引用: jquery autocomplete @mention

如果我使用 contenteditable div 而不是 textarea,这将不起作用。这是我的代码:

<div id="MyText" contenteditable="true"></div>​

$("#MyText").bind("keydown", function (event) {
        if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) {
            event.preventDefault();
        }
    }).autocomplete({
        minLength: 0,
        source: function (request, response) {
            var term = request.term,
                results = [];
            if (term.indexOf("@") >= 0) {
                term = extractLast(request.term);
                if (term.length > 0) {
                    results = $.ui.autocomplete.filter(tags, term);
                } else {
                    results = [startTyping];
                }
            }
            response(results);
        },
        focus: function () {
            return false;
        },
        select: function (event, ui) {
            if (ui.item.value !== startTyping) {
                var terms = this.value.split(' ');
                terms.pop();
                terms.push("@" + ui.item.value + "</span>");
                this.value = terms.join(" ");
            }
            return false;
        }
    }).data("autocomplete")._renderItem = function (ul, item) {
        if (item.label != startTyping) {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a><div><img src='" + item.icon + "'/></div><div>" + item.label + "</div></div></a>")
                .appendTo(ul);
        } else {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a>" + item.label + "</a>")
                .appendTo(ul);
        }
    };

有什么想法吗?

最佳答案

input/textarea 和 contenteditable div 之间的主要区别在于,您可以使用 .html() 方法(而不是 .value 或 .val() 方法)访问后者的内容。

这是自动完成代码:

$("#MyText")
    .bind("keydown", function (event) {
        if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) {
            event.preventDefault();
        }
    })
    .autocomplete({
        minLength: 0,
        source: function (request, response) {
            var term = request.term,
                results = [];
            if (term.indexOf("@") >= 0) {
                term = extractLast(request.term);
                if (term.length > 0) {
                    results = $.ui.autocomplete.filter(tags, term);
                } else {
                    results = [startTyping];
                }
            }
            response(results);
        },
        focus: function () {
            return false;
        },
        select: function (event, ui) {
            if (ui.item.value !== startTyping) {
                var value = $(this).html();
                var terms = split(value);
                terms.pop();
                terms.push(ui.item.value);
                $(this).html(terms.join("@"));
                placeCaretAtEnd(this);
            }
            return false;
        }
    })
    .data("autocomplete")._renderItem = function (ul, item) {
        if (item.label != startTyping) {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a><div>" + item.label + "</div></div></a>")
                .appendTo(ul);
        } else {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a>" + item.label + "</a>")
                .appendTo(ul);
        }
    }
;

编辑(2):这是link to the jsfiddle

关于javascript - 使用 contenteditable div 而不是 textarea 自动完成似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324822/

相关文章:

javascript - 什么正则表达式可以替换所有其他单词?

javascript - 如何让这个 HTML/Javascript 随机数生成器输出多个结果?

javascript - 使用 Jquery 获取最近输入字段的 POST_ID

javascript - Codecademy jQuery 卡在 "Modifying HTML Elements"

javascript - 如何防止在前置滚动?

jquery - 使 JQuery UI 对话框自动扩大或缩小以适应其内容

jquery - Border-Spacing 和 Border-Collapse 不起作用

javascript - jQuery Mobile 1.4.2 + Photoswipe 将所有链接与其自身关联起来

jquery - Iviewer - 旋转图像后 chrome 中的伪影

javascript - JQuery TableSort 不适用于 JQuery floatThead