jQuery autocomplete - передать атрибут целевого элемента в качестве дополнительного параметра? - PullRequest
1 голос
/ 27 августа 2010

Я использую плагин jQuery UI Autocomplete для вызова ajax и получения данных. Помимо передачи текста элемента ввода, я пытаюсь передать атрибут 'id' элемента ввода в качестве дополнительного параметра. Выдержка из моего кода выглядит так -

    $("#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
                        }
                    }))
                }
            })
        },

    });

Дополнительный параметр добавляется в свойство data в вызове ajax. Это работает хорошо, если я специально передам значение, например '3', но я хочу передать атрибут 'id' элемента ввода, для которого вызывается функция, например $ (Это) .attr ( 'ID').

Полагаю, проблема в том, что «this» не оценивается в этой части кода, но я не могу понять, как еще я могу ссылаться на целевой элемент. Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 27 августа 2010
$('#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') ... });
});

Возможно, есть более элегантный способ, но я знаю, что автозаполнение несколько сложнее.Я лично генерирую запрос с параметрами получения и использую formatItem / formatResult вместо назначения источника для вызова ajax.

0 голосов
/ 27 августа 2010

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

$("#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')
                }
      ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...