【问题标题】:jQuery autocomplete for dynamically created inputsjQuery自动完成动态创建的输入
【发布时间】:2011-02-09 10:50:30
【问题描述】:

我在使用 jQuery 自动完成和动态创建的输入(再次使用 jQuery 创建)时遇到问题。我无法自动完成以绑定到新输入。

自动完成

      $("#description").autocomplete({
         source: function(request, response) {
            $.ajax({
                url: "../../works_search",
                dataType: "json",
                type: "post",
                data: {
                    maxRows: 15,
                    term: request.term
                },
                success: function(data) {
                    response($.map(data.works, function(item) {
                        return {
                                label: item.description,
                                value: item.description
                        }
                    }))
                }
            })
        },
        minLength: 2,
    });


带有输入的新表格行

var i = 1;
var $table = $("#works");
var $tableBody = $("tbody",$table);

$('a#add').click(function() {
    var newtr = $('<tr class="jobs"><td><input type="text" name="item[' + i + '][quantity]" /></td><td><input type="text" id="description" name="item[' + i + '][works_description]" /></td></tr>');
    $tableBody.append(newtr); 
    i++;
});

我知道问题出在页面加载后创建的内容,但我不知道如何解决它。我已经阅读了几个相关的问题并遇到了 jQuery live 方法,但我仍然处于困境中!

有什么建议吗?

【问题讨论】:

    标签: jquery dynamic input append jquery-autocomplete


    【解决方案1】:

    我发现我需要在附加之后放置自动完成功能:

     $tableBody.append(newtr);  
     $('.description', newtr).autocomplete(autocomp_opt);
    

    【讨论】:

      【解决方案2】:

      首先,您需要存储.autocomplete() 的选项,例如:

      var autocomp_opt={
               source: function(request, response) {
                  $.ajax({
                      url: "../../works_search",
                      dataType: "json",
                      type: "post",
                      data: {
                          maxRows: 15,
                          term: request.term
                      },
                      success: function(data) {
                          response($.map(data.works, function(item) {
                              return {
                                      label: item.description,
                                      value: item.description
                              }
                          }))
                      }
                  })
              },
              minLength: 2,
          };
      

      使用class 属性标记input 更简洁,例如:

      <input type="text" class="description" name="item[' + i + '][works_description]" />
      

      最后,当您创建一个新表行时,应用 .autocomplete() 和已存储在 autocomp_opt 中的选项:

      $('a#add').click(function() {
          var newtr = $('<tr class="jobs"><td><input type="text" name="item[' + i + '][quantity]" /></td><td><input type="text" class="description" name="item[' + i + '][works_description]" /></td></tr>');
          $('.description', newtr).autocomplete(autocomp_opt);
          $tableBody.append(newtr); 
          i++;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多