Jquery 具有自动完成功能的editableTableWidget

Jquery 具有自动完成功能的editableTableWidget,jquery,html,Jquery,Html,我有一个带有editablewidget的html表,因此我可以更改单元格的内容,我构建了一个ajax调用,这样数据库也可以更改。 现在客户端需要一个自动完成功能。我以前使用过自动完成功能,但只在htmlform元素上使用过,如text或textarea 我应该在文本的名称中输入什么 以下是代码示例: $( "#Name-of-Text" ).autocomplete({source: NN}); editablewidget有一个text字段,但没有名称或id $.fn.editable

我有一个带有
editablewidget
的html表,因此我可以更改单元格的内容,我构建了一个
ajax
调用,这样数据库也可以更改。 现在客户端需要一个
自动完成
功能。我以前使用过自动完成功能,但只在html
form
元素上使用过,如
text
textarea
我应该在文本的名称中输入什么

以下是代码示例:

$( "#Name-of-Text" ).autocomplete({source: NN});
editablewidget
有一个
text
字段,但没有名称或id

  $.fn.editableTableWidget = function (options) {
    'use strict';
    return $(this).each(function () {
        var buildDefaultOptions = function () {
                var opts = $.extend({}, $.fn.editableTableWidget.defaultOptions);
                opts.editor = opts.editor.clone();
                return opts;
            },
            activeOptions = $.extend(buildDefaultOptions(), options),
            ARROW_LEFT = 37, ARROW_UP = 38, ARROW_RIGHT = 39, ARROW_DOWN = 40, ENTER = 13, ESC = 27, TAB = 9,
            element = $(this),
            editor = activeOptions.editor.css('position', 'absolute').hide().appendTo(element.parent()),
            active,
            showEditor = function (select) {
                active = element.find('td:focus');
                if (active.length) {
                    editor.val(active.text())
                        .removeClass('error')
                        .show()
                        .offset(active.offset())
                        .css(active.css(activeOptions.cloneProperties))
                        .width(active.width())
                        .height(active.height())
                        .focus();
                    if (select) {
                        editor.select();
                    }
                }
            },
            setActiveText = function () {
                var text = editor.val(),
                    evt = $.Event('change'),
                    originalContent;
                if (active.text() === text || editor.hasClass('error')) {
                    return true;
                }
                originalContent = active.html();
                active.text(text).trigger(evt, text);

                var id = active.attr('data-id');
                var Resultaat = Opslaan(id, text);
                //alert(Resultaat);

                if (evt.result === false) {
                    active.html(originalContent);
                }
            },
            movement = function (element, keycode) {
                if (keycode === ARROW_RIGHT) {
                    return element.next('td');
                } else if (keycode === ARROW_LEFT) {
                    return element.prev('td');
                } else if (keycode === ARROW_UP) {
                    return element.parent().prev().children().eq(element.index());
                } else if (keycode === ARROW_DOWN) {
                    return element.parent().next().children().eq(element.index());
                }
                return [];
            };
        editor.blur(function () {
            setActiveText();
            editor.hide();
        }).keydown(function (e) {
            if (e.which === ENTER) {
                setActiveText();
                editor.hide();
                active.focus();
                e.preventDefault();
                e.stopPropagation();
            } else if (e.which === ESC) {
                editor.val(active.text());
                e.preventDefault();
                e.stopPropagation();
                editor.hide();
                active.focus();
            } else if (e.which === TAB) {
                active.focus();
            } else if (this.selectionEnd - this.selectionStart === this.value.length) {
                var possibleMove = movement(active, e.which);
                if (possibleMove.length > 0) {
                    possibleMove.focus();
                    e.preventDefault();
                    e.stopPropagation();
                }
            }
        })
        .on('input paste', function () {
            var evt = $.Event('validate');
            active.trigger(evt, editor.val());
            if (evt.result === false) {
                editor.addClass('error');
            } else {
                editor.removeClass('error');
            }
        });
        element.on('dblclick', showEditor)
        .css('cursor', 'pointer')
        .keydown(function (e) {
            var prevent = true,
                possibleMove = movement($(e.target), e.which);
            if (possibleMove.length > 0) {
                possibleMove.focus();
            } else if (e.which === ENTER) {
                showEditor(false);
            } else if (e.which === 17 || e.which === 91 || e.which === 93) {
                showEditor(true);
                prevent = false;
            } else {
                prevent = false;
            }
            if (prevent) {
                e.stopPropagation();
                e.preventDefault();
            }
        });

        element.find('td').prop('tabindex', 1);

        $(window).on('resize', function () {
            if (editor.is(':visible')) {
                editor.offset(active.offset())
                .width(active.width())
                .height(active.height());
            }
        });
    });

};

这花了一段时间,但很容易

只需将
.autocomplete
放在调用
editablewidget
的后面

$('#tbl1, #tbl2, #tbl3').editableTableWidget({ 
    editor: $('<input>').autocomplete({
    source: "ajax_autocomplete.php",
    minLength: 2
    })
});
$('#tbl1,#tbl2,#tbl3')。editableTableWidget({
编辑器:$('')。自动完成({
来源:“ajax\u autocomplete.php”,
最小长度:2
})
});
我已经回答了我自己的问题,有人通过谷歌搜索来到这里