javascript - jQuery 自动完成仅为第一个动态插入的元素初始化

标签 javascript jquery ruby-on-rails-3 autocomplete

这是我们为动态插入的元素初始化自动完成 (jQuery) 的方式:

$(function() {
  setTimeout(function(){
    $("[id^='requisition_material_items_attributes_'][id$='_item_name_autocomplete']").each(function (){
       $(this).autocomplete({
        minLength: 1,
        source: $(this).data('autocomplete-source'),
        select: function(event, ui) {
            $(this).val(ui.item.value);
        }
      });
    });
  }, 5000);
});

这里的setTimeout(5秒延迟)允许对第一个动态插入的元素进行自动完成初始化。但是,初始化不适用于第二个插入的元素,并且自动完成不会为第二个元素启动。如何修复上面的 JS 代码以使其适用于第二个元素及其他元素?

更新

jQuery autocomplete for dynamically created inputs提供的解决方案(所谓的重复案例)在这里不起作用,因为它是针对不同的问题。在重复的情况下,通过在使用 JavaScript 生成新元素时添加自动完成的初始化来解决问题。在我们的例子中,新元素是由 Rails 生成的,生成时不能用自动完成初始化代码插入其中。在我们的例子中,自动完成适用于第一个插入的元素,而不适用于第二个元素。我们的问题是为第二个元素和之后的元素进行自动完成初始化。

更新

item_name_autocomplete 的 Rails View :

<%= f.input :item_name_autocomplete, :label => t("Item Name"), :input_html => { data: {autocomplete_source: SUBURI + base_materialx.autocomplete_parts_path}},:placeholder => t("Enter Part Name Keyword"), :required => true  %>

最佳答案

setTimeout 在指定的延迟后调用该函数,它没有设置间隔,您可以使用 setInterval 函数,但在这种情况下这是一个糟糕的主意。无论何时生成它们,都应该选择目标生成的元素,然后在这些特定元素上调用该方法。没有可靠/好的方法来处理这个问题。

关于javascript - jQuery 自动完成仅为第一个动态插入的元素初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568156/

相关文章:

ruby-on-rails - Rails 4删除嵌套属性,只能在创建时使用,但不能在编辑/更新时使用

javascript - jqgrid不更新本地数据

javascript - 为什么原生 javascript 数组 forEach 方法明显慢于标准 for 循环?

javascript - 如何在 ReactJS 和 Axios 中从输入字段获取 ID 并通过该 ID 进行删除

javascript - 如何更改 Highcharts 中的标题

javascript - 动态 jQuery 无冲突

javascript - 使用 jQuery UI 可调整大小工具时,检查宽度的更有效方法是什么?

ruby-on-rails-3 - 如何在ActiveAdmin中过滤IS NULL?

jquery - 使用 Rails 3 保存或更新模型时刷新 div

javascript - 实习生功能测试 - 按顺序单击一组按钮