проблема с автозаполнением обратного вызова jquery ui (1.8) - PullRequest
0 голосов
/ 01 июля 2010

С этим кодом:

function setupRow(event, ui) {
        var textbox, // how do i get to the textbox that triggered this? from there
        // on i can find these neighbours:
        hiddenField = textbox.next(), 
        select = textbox.parents('tr').find('select');

        textbox.val(ui.item.Name);
        hiddenField.val(ui.item.Id);
        $.each(ui.item.Uoms, function(i, item){
            select.append($('<option>' + item + '</option>'));
        });             
        return false;
    }
    function setupAutoComplete(){
        var serviceUrl = "/inventory/items/suggest";
        $("input.inputInvItemName").autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: serviceUrl,
                    data: request,
                    dataType: "json",
                    success: function(data) {
                        response($.map(data.InventoryItems, function(item) {
                            return {
                                value: item.Name
                            };
                        }));
                    },
                    select: function(event, ui) {
                        setupRow(event, ui);
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 3,
            delay: 500
        });
    }

все вроде нормально. Проблема в том, что обработчик выбора никогда не запускается, даже не вызывается даже анонимная функция, которая оборачивает мой оригинальный делегат setupRow для целей отладки.

кто-нибудь может увидеть мою ошибку?

Я также оставил вопрос в комментарии: как мне добраться до текстового поля, в котором была автопредставление? Здесь нельзя использовать идентификатор, потому что эти текстовые поля являются кратными и генерируются на лету в интерактивном режиме. Или есть другой способ сделать то же самое?

Спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 01 июля 2010

ОП точка зрения

var textbox, // how do i get to the textbox that triggered this? from there
        // on i can find these neighbours:

Моя точка зрения

пробовали ли вы,

var textbox = $(event.target);

или вы можете сделать это,

ОП точка зрения

select: function(event, ui) {
       setupRow(event, ui);
},

Моя точка зрения

select: setupRow;

тогда

var textbox = this; // just a guess... wait.. 
0 голосов
/ 01 июля 2010

ОК, сделайте шаг ближе, используя

inputs.bind("autocompleteselect", setupRow);

теперь setupRow срабатывает.

Теперь кажется, что обратный вызов успеха преобразует данные, которые мне возвращаются. Мне нужно найти способ, чтобы оба отображали правильное значение в выпадающем списке, не разрушая ответ на запросы ...

Есть идеи?

0 голосов
/ 01 июля 2010
anyone can see my error?

Я думаю, ты забыл поставить ';' .

$.ajax({
                    url: serviceUrl,
                    data: request,
                    dataType: "json",
                    success: function(data) {
                        response($.map(data.InventoryItems, function(item) {
                            return {
                                value: item.Name
                            }
                        }));

Или есть другой способ сделать то же самое?

Я думаю, что вы используете плагин автозаполнения jquery ui. Если да, вы можете получить его вот так.

$('.ui-autocomplete-input')

В противном случае вы можете установить определенный класс для этих текстовых полей и получить доступ к этим текстовым полям через этот класс.

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