Отправить идентификатор элемента в качестве параметра url в источнике автозаполнения jQuery - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь сделать что-то вроде этого:

$("[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 ]

6 голосов
/ 05 мая 2011

Если вам нужно установить это для многих элементов одновременно, используйте цикл 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
});
5 голосов
/ 05 мая 2011

Вы должны пройти через них, используя .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");

Посмотрите, улучшит ли кто-нибудь из них производительность, у вас есть интересный тестовый пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...