Jquery ui 当一页上有多个时,获取所选自动完成的术语

Jquery ui 当一页上有多个时,获取所选自动完成的术语,jquery-ui,autocomplete,jquery-ui-autocomplete,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,我在一个页面中动态添加jquery ui自动完成 My.autocomplete()代码包含一个$.getJSON('My_url',My_payload'),其中,在My_payload'中,我试图发送request.term(我在jqueryui文本框中键入的内容)以及jquery ui文本框的id 问题是,对于所有动态添加的文本框,它们只是拾取原始自动完成的术语和id 我设法找到了一种方法来获取添加的(不是原始的)自动完成的id,方法是将自动完成包装在一个函数中,该函数将添加的字段作为参数

我在一个页面中动态添加jquery ui自动完成

My.autocomplete()代码包含一个$.getJSON('My_url',My_payload'),其中,在My_payload'中,我试图发送request.term(我在jqueryui文本框中键入的内容)以及jquery ui文本框的id

问题是,对于所有动态添加的文本框,它们只是拾取原始自动完成的术语和id

我设法找到了一种方法来获取添加的(不是原始的)自动完成的id,方法是将自动完成包装在一个函数中,该函数将添加的字段作为参数传入,但由于请求中有“term”,它来自.autocomplete,我不知道如何为新的自动完成获取该id

//=======来自的动态表单集脚本https://medium.com/all-about- 
django/adding-forms-dynamicy-to-a-django-formset-375f1090c2b0======
函数updateElementIndex(el、前缀、ndx){
var id_regex=new RegExp('('+前缀+'-\\d+);
var替换=前缀+'-'+ndx;
如果($(el).attr(“for”))$(el).attr(“for”,$(el).attr(“for”).replace(id_regex,replacement));
如果(el.id)el.id=el.id.replace(id_regex,替换);
如果(el.name)el.name=el.name.replace(id_regex,replacement);
}
函数cloneMore(选择器,前缀){
var newElement=$(选择器).clone(true);
var-total=$('#id'+前缀+'-total_FORMS').val();
newElement.find(':input:not([type=button]):not([type=submit]):not([type=reset]))。每个(函数(){
if($(this.attr('name')){
变量名称=$(this.attr('name').replace('-'+(total-1)+'-','-'+total+'-');
变量id='id_u'+名称;
$(this.attr({'name':name,'id':id}).val('').removeAttr('checked');
if($(this).attr('id')。包括('gl')){
console.log($(this.attr('id'))
自动完成($(此))
}
}
});
newElement.find('label')。每个(函数(){
var-forValue=$(this.attr('for');
如果(forValue){
forValue=forValue.replace('-'+(total-1)+'-','-'+total+'-');
$(this.attr({'for':forValue});
}
});
总计++;
$(“#id"+前缀+”-总计表格”).val(总计);
$(选择器).after(新元素);
var conditionRow=$('.form行:not(:last');
conditionRow.find('.btn.add form row')
.removeClass('btn-success').addClass('btn-danger'))
.removeClass('add-form-row')。addClass('remove-form-row'))
.html(“”);
返回false;
}
函数deleteForm(前缀,btn){
var total=parseInt($('#id'+prefix+'-total_FORMS').val();
如果(总数>1){
btn.closest('.form row').remove();
var forms=$('.form row');
$('#id'+prefix+'-TOTAL#u FORMS').val(FORMS.length);

对于(var i=0,formCount=forms.length;i您可能希望尝试使其更易于测试。例如:

  function make_autocomplete(obj) {
    obj.autocomplete({
      minLength: 2,
      source: function(req, resp) {
        var myData = {
          term: req.term,
          original_form_branch_id: $(this).closest("form").attr("id"),
          this_formset_row_branch_sym_id: $(this).closest(".row").find("select").val()
        }
        $.getJSON("myurl", myData, function(results) {
          resp(results);
        });
      }
    });
  }
小提琴:

这使用
.closest()
从相关对象收集详细信息。此外,我认为在
焦点
事件上初始化自动完成没有任何好处

如果您需要进一步的帮助,请提供可在工作示例中使用的示例数据


希望这能有所帮助。

您可能希望使测试更加简单。例如:

  function make_autocomplete(obj) {
    obj.autocomplete({
      minLength: 2,
      source: function(req, resp) {
        var myData = {
          term: req.term,
          original_form_branch_id: $(this).closest("form").attr("id"),
          this_formset_row_branch_sym_id: $(this).closest(".row").find("select").val()
        }
        $.getJSON("myurl", myData, function(results) {
          resp(results);
        });
      }
    });
  }
小提琴:

这使用
.closest()
从相关对象收集详细信息。此外,我认为在
焦点
事件上初始化自动完成没有任何好处

如果您需要进一步的帮助,请提供可在工作示例中使用的示例数据


希望这能有所帮助。

好奇
var-original\u-form\u-branch\u-id=$(“\id\u-branch”).val()
因为
$(“\id\u-branch”)
似乎不存在。对不起,那是从我有一个只有一个自动完成的表单(我正在切换到一个表单集)开始好奇
var-original\u-form\u-branch\u-id=$(“\id\u-branch”).val()
因为
$(“#id_branch”)
似乎不存在。对不起,那是从我有一个只有一个自动完成的表单时开始的(我正在切换到表单集)