2011-05-04 2 views
1

Я пытаюсь сделать что-то вроде этого:Отправить идентификатор элемента в качестве параметра URL-адрес в JQuery автозаполнения источника

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

взглянуть на мой пост, у вас есть интересный тест, см, если какой-либо из моих предложений улучшить производительности, или если они вообще работают. :) – DarthJDG

+0

Спасибо за предложения, я дам им попробовать. Как я сказал в своем комментарии под вашим ответом, я пересматриваю использование автозаполнения jQuery. Я мог бы изучить другие плагины, но я не хочу тратить лишнее время на эксперименты, так как этот проект должен быть выполнен. Скорее всего, я получу поля автозаполнения старомодным способом - good ol ''<... onKeyup() ... />' и обрабатывать все через пользовательские CSS и JS. Хотелось бы, чтобы это не приходило к этому. – jreed121

ответ

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 
}); 
+0

Почему мне не нужно использовать опцию 'select:'? Это потому, что select: вызывается потом? – jreed121

+0

NM, я пробовал это раньше, но я помню, что я решил не использовать .each, потому что я думал, что это действительно влияет на производительность, но я просто протестировал его, и он добавляет примерно 1-3 секунды к времени загрузки (1500+ автозаполнения поля). – jreed121

+0

1500? Ничего себе, я бы хотел знать, какое приложение это –

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"); 
} 

Edit: Как уже говорилось в комментарии, у вас есть МНОГО полей, как 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"); 

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

+0

Фактически сужение по классу, по-видимому, немного помогает, реальный тест наступит, когда я сделаю оставшиеся поля автозаполнениями - теперь может быть любое место, где от 1000 до 2000 полей, умножить это на 4 (или даже 7 в зависимости от что я определяю), и это будет конечным результатом. Я начинаю рассматривать другие варианты, так как 1500 занимает около 9 секунд, чтобы загрузить, я, возможно, не захочу узнать, что 10 000+ делает для времени загрузки! – jreed121

Смежные вопросы