【问题标题】:autocomplete functionality on dynamic textbox动态文本框上的自动完成功能
【发布时间】:2014-11-01 08:25:13
【问题描述】:

我有一个场景如下,

需要在带有 onkeyup 功能的动态文本框上添加自动完成功能

我的代码如下,这里我在 buttonclick 上调用了一个函数“GetName”,我加载了动态文本框

function GetName() {
  var dataToSend = JSON.stringify({ prefixText: $('#search').val(), Id: $("#SearchType").val()
});

    $.ajax({
        type: "POST",
        data: { jsonData: dataToSend },
        url: "GetName",
        datatype: "json",
        success: function (result) {
            $("#ResourceNames").empty();
            $("#ResourceNames").append('<table>');

            $.each(result, function (i, Name) {                
                $("#ResourceNames").append('<tr><td ><Label>' + Name.Value + '</label></td><td>  <input type="text" id="Supervisor" class = "form-control", onkeyup="GetResource(\'' + Name.Text + '\');"/></td></tr>');                  

            });

        },
        error: function (xhr, status) {
            alert(status);
        }
    })
    $("#ResourceNames").append('</table>');
}

这里文本框主管的 onkeyup 事件正在使用参数调用下面的函数 getresource

function GetResource(i) {

    debugger;
    var dataToSend = JSON.stringify({ prefixText: $("#Supervisor").val(), designation: i });
    $.ajax({
        url: "GetSupervisor",
        data: { jsonData: dataToSend },
        dataType: 'json',
        type: 'POST',
        success: function (data) {
            $("#Supervisor").autocomplete({source:data});
            });
        },
        error: function (error) {
            alert('error; ' + error.text);
        }

    });

}

无法将自动完成数据绑定到动态文本框,谁能帮我解决这个问题?

【问题讨论】:

  • 成功回调中data的结构是什么..?

标签: ajax json jquery-ui model-view-controller jquery-autocomplete


【解决方案1】:

您的代码中有几个问题:

  • 首先,jQuery 不会将字符串连接到DOM,它会创建一个DOMElement。所以, $("#ResourceNames").append('&lt;table&gt;'); 将附加整个 &lt;table&gt; 元素。您附加到 #ResourceNames 的任何内容都将添加到表格之后,而不是在表格内部。
  • 您要附加的 HTML 包含 id。因此,可能有多个元素具有相同的id,这是无效的,具体取决于响应。最好为这些元素使用通用类名。
  • 您不需要手动处理keyup 事件。您可以将您想要命中的url 指定为自动完成的source 选项的值,前提是它返回适合自动完成的响应。请参阅文档中的 example
  • 您可以将值存储为data-* 属性并在以后访问它,而不是通过内联处理程序传递值。

所以你的代码应该是这样的:

function GetName() {

  var dataToSend = JSON.stringify({ prefixText: $('#search').val(), Id: $("#SearchType").val()});

  $.ajax({
    type: "POST",
    data: { jsonData: dataToSend },
    url: "GetName",
    datatype: "json",
    success: function (result) {
        var htmlString ="<table>";

        $.each(result, function (i, Name) {                
            htmlString +="<tr><td ><Label>" + Name.Value + "</label></td><td> <input type='text'  class = 'form-control Supervisor' data-name='"+ Name.Text + "'/></td></tr>";                  
        });
    },
    error: function (xhr, status) {
        alert(status);
    }
 })
 $("#ResourceNames").append(htmlString);
 $(".Supervisor")..autocomplete({
     source: "GetSupervisor" // where GetSupervisor is your data source
 });
}

如果您想手动发送请求和数据并将结果传递给自动完成,您可以指定一个函数作为源选项的值。 (有关更多信息,请参阅my another answer)。例如:

$(".Supervisor").autocomplete({
     source: function(request,response){
       /*send the request here. 
       request.term contains the current value entered in textfield
       pass the results you want to display like response(data)*/
     }
 });

阅读API documentation,用它玩一会儿,你就可以让它工作了。

【讨论】:

  • 嗨 T J 感谢您的回答,我如何在我的自动完成事件中获取文本框的数据名称
猜你喜欢
  • 2015-08-30
  • 2023-03-16
  • 2010-11-14
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多