动态输入框无法与自动完成绑定。

3

我正在尝试按照这个解决方案进行操作,但是没有成功。

jQuery为动态创建的输入框提供自动完成功能
var autocomp_opt = {
    source: function (request, response) {

    $.ajax({
        url: "ServiceProxy.asmx/ByKeyWord",
        cache: false,
        data: "{ 'term':'" + request.term + "'}",
        dataType: "json",
        type: "POST",
        crossDomain: "true",
        contentType: "application/json; charset=utf-8",
        error: function (xhr, textStatus, errorThrown) {
            alert('Error: ' + xhr.responseText);
        },
        success: function (data) {
            response($.map(data, function (item) {
                return item.split(",");
            }));       
        },

        error: function (a, b, c) {

        }
    });
},
    minLength: 2
};

当我的输入框生成时,我尝试...

    input = document.createElement("input");
    input.disabled = true;  
    input.className = this.FORM_INPUT_CLASS;

    $(input.id).autocomplete(autocomp_opt);
    table.rows[table.rows.length - 1].cells[1].appendChild(input);

没有错误,但似乎没有正确地绑定它...如果有人有任何想法,请发帖。谢谢。


1
请检查您的浏览器JavaScript控制台。最可能的情况是,input.id未定义。 - Bojangles
为什么不使用append和live jQuery函数? - Mostafa
输入.input.id在其他地方已经定义并且显示正确。你能给一个关于自动补全的例子吗?我看到的示例与鼠标点击有关。但是"did"只是一个预定义函数,所以我不确定。JQuery的语法真折磨人啊... - wirble
input.id 的值是什么? - jk.
抱歉 - 我应该更清楚地表达。它只是文本框的id =“myvalue”的名称,并设置为input.id =“myvalue”。 - wirble
2个回答

3

尝试修改此行:

$(input.id).autocomplete(autocomp_opt);

转换为:

$('#' + input.id).autocomplete(autocomp_opt);

1
当我看到这个时,让我笑了,因为我经常犯这个错误。由于input.id没有哈希符号,jQuery会返回没有元素,并跳过绑定并优雅地失败而不会出现错误,仅仅是因为它找不到预期的目标。 - b01
@jk 那个方法不起作用。当输入文本已经在页面上时,它可以工作。但是动态地就不行了... - wirble

0

当我添加以下内容时,它可以工作:

    $('#fieldname").autocomplete(autocomp_opt);

在这行之后

    table.rows[table.rows.length - 1].cells[1].appendChild(input);

我猜只有在输入框附加到某个东西时才能注册。值得注意的是,在焦点、选择等方面添加某种事件处理程序也可以工作。虽然我怀疑这是因为此时输入框已完全呈现/添加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接