在jQuery自动完成源中将元素的id作为url参数发送

时间:2011-05-04 20:09:57

标签: jquery user-interface autocomplete

我正在尝试这样做:

$("[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')等选择器。

2 个答案:

答案 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可能已经为优化做了这一点。

您也可以尝试在自动填充的createsearch事件中设置源选项,尽管后者可能无效。看它的表现并不会有害:

$("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");

看看是否有任何提高性能,这是一个有趣的测试用例。