我正在尝试这样做:
$("[type=text]").autocomplete({
source: "./json.php?id="+$(this).attr("id"),
minLength: 2
}).addClass("ui-widget ui-widget-content ui-corner-left");
显然source: "./json.php?id="+$(this).attr("id")
不起作用。有谁知道我怎么做到这一点?将有许多自动填充字段,因此我无法使用$('#ID')
等选择器。
答案 0 :(得分:6)
如果您需要同时为多个元素设置此项,请使用each()
循环:
$("[type=text]").each(function() {
var thisEl = $(this);
thisEl.autocomplete({
source: "./json.php?id=" + thisEl.attr("id"),
minLength: 2
});
// whatever else you want to do with the element
});
答案 1 :(得分:5)
您必须使用.each()
进行迭代才能在适当的范围内执行.attr()
:
$("input[type=text]").each(function(){
$(this).autocomplete({
source: "./json.php?id="+$(this).attr("id"),
minLength: 2
}).addClass("ui-widget ui-widget-content ui-corner-left");
}
修改:如评论中所述,您有 LOT 字段,例如1500+。您可以尝试通过向每个字段添加一个类,并使用.classname
选择器来提高性能,或者至少将初始搜索范围缩小到input[type="text"]
,尽管jQuery可能已经为优化做了这一点。
您也可以尝试在自动填充的create
或search
事件中设置源选项,尽管后者可能无效。看它的表现并不会有害:
$("input[type=text]").autocomplete({
search: function(){
$(this).autocomplete("option", "source", "./json.php?id="+$(this).attr("id"));
},
minLength: 2
}).addClass("ui-widget ui-widget-content ui-corner-left");
或者你甚至可以绑定到输入字段本身的焦点事件来设置源:
$("input[type=text]").autocomplete({
minLength: 2
}).focus(function(){
$(this).autocomplete("option", "source", "./json.php?id="+$(this).attr("id"));
}).addClass("ui-widget ui-widget-content ui-corner-left");
看看是否有任何提高性能,这是一个有趣的测试用例。