Javascript jQuery自动完成-将目标元素属性作为额外参数传递?

Javascript jQuery自动完成-将目标元素属性作为额外参数传递?,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我正在使用jQueryUIAutoComplete插件进行ajax调用并检索数据。以及传递输入元素的文本,我试图将输入元素的“id”属性作为附加参数传递。我的代码摘录如下所示- $("#autocomplete input").autocomplete({ source: function(request, response) { $.ajax({ url: "search.php",

我正在使用jQueryUIAutoComplete插件进行ajax调用并检索数据。以及传递输入元素的文本,我试图将输入元素的“id”属性作为附加参数传递。我的代码摘录如下所示-

    $("#autocomplete input").autocomplete({ 
        source: function(request, response) {
            $.ajax({
                url: "search.php",
                dataType: "json",
                data: {
                    term: extractLast(request.term),
                    extra_param: $(this).attr('id')
                },
                success: function(data) {
                    response($.map(data, function(item) {
                        return {
                            label: item.label,
                            value: item.name
                        }
                    }))
                }
            })
        },

    });
额外的参数被添加到ajax调用中的“data”属性中。如果我专门传入一个值,例如'3',它可以正常工作,但是我想传递函数调用的输入元素的'id'属性,例如$(this).attr('id')

我假设在代码的这一部分中没有对“this”进行评估是一个问题,但是我不知道如何引用目标元素。感谢您的帮助

$('#autocomplete input').each(e, function() {
    $(e).autocomplete('/path?param=' + $(e).attr('id'), function() { ... });
});

$('#autocomplete input').each(e, function() {
    $(e).autocomplete({ source:function ... extra_param: $(e).attr('id') ... });
});

也许有一种更优雅的方式,但是,我知道自动完成有点复杂。我个人使用get参数生成请求,并使用formatItem/formatResult,而不是将源代码分配给ajax调用。

我通过将autocomplete调用分解为each来实现它。这允许我在执行自动完成之前捕获目标元素-

$("#autocomplete input").each(function() {

    var that = this;

    $(that).autocomplete({

        source: function(request, response, this_element) {
            $.ajax({
                url: "search.php",
                dataType: "json",
                data: {
                    term: extractLast(request.term),
                    extra_param: $(that).attr('id')
                }
      ....
“Source”是输入的ID,您将收到此项并将其保存在变量“that”中。当输入“Source”调用autocomplete函数时,您可以发送存储在AJAX变量“that”中的id值。 例如:


$(文档).ready(函数(){
$(“#源”)。每个(函数(){
var=这个;
var url=“”;
美元。自动完成({
来源:功能(请求、响应){
$.ajax({
url:url+“models/querys/C_getOptions.php”,
数据类型:“json”,
数据:{
单词:request.term,
id:$(that.attr('id'))
},
成功:功能(数据){
答复(数据);
}
});
},
最小长度:1,
选择:功能(事件、用户界面){
//警报(“选择:”+ui.item.label);
}
});
})
});

干杯,但第一个示例有问题。获取语法错误-“缺少:在属性id之后”。我假设,因为它是一个对象……请在您的答案中添加一些上下文,让OP和其他人知道为什么原始代码不起作用,您更改了什么,以及为什么。
<script type="text/javascript">
$(document).ready(function() {
$("#Source").each(function() {
  var that = this;
  var url = "<?php echo constant('URL'); ?>";
  $(that).autocomplete({
    source: function(request, response){
      $.ajax({
        url: url+"models/queries/C_getOptions.php",
        dataType:"json",
        data:{
          word:request.term,
          id : $(that).attr('id')
        },
        success: function(data){
          response(data);
        }
      });
    },
    minLength: 1,
    select: function(event,ui){
      //alert("Selecciono: "+ ui.item.label);
    }
  });
})
});