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