3

我想要遵循这个解决方案,但没有得到任何运气。 jQuery autocomplete for dynamically created inputs动态输入文本框不绑定到自动完成

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

+0

为什么不使用append和live jquey函数? – Mostafa

+0

input.id在其他地方定义并确实显示正确。你能举一个这样的自动完成的例子。我看过的示例与鼠标点击有关。但是,这只是一个预定义的功能,所以我不确定。 jQuery的语法正在杀死我...... – wirble

回答

0

它工作时,我补充一下:

此行后
$('#fieldname").autocomplete(autocomp_opt); 

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

我想它只能在输入框附加到某些东西时才能注册。还值得注意的是,添加某种事件处理onfocus,onselect,即..,它也可以。虽然我怀疑,这是因为输入框在此处已完全呈现/添加。

3

尝试改变这一行:

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

这样:

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

当我看到这个时候让我大笑,我犯这个错误很多。由于input.id没有散列符号,因此jQuery只返回没有元素,并且跳过绑定并正常失败,没有错误,仅仅是因为它无法找到预期的目标。 – b01

+0

@jk这没有奏效。它在输入文本已经在页面上时起作用。但不能动态地工作... – wirble