jquery ui`s autocomplete select callback(1.8)的问题

时间:2010-07-01 04:01:29

标签: javascript jquery jquery-ui autocomplete

使用此代码:

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
        });
    }
一切似乎都好。问题是select处理程序永远不会触发,甚至不会调用包装我的原始委托setupRow用于调试目的的匿名函数。

任何人都可以看到我的错误?

我还在评论中留下了一个问题:如何进入具有自动提示的文本框。这里不能使用id,因为这些文本框是多个并且是交互式生成的。还是有另一种方法可以做同样的事情吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

OP观点

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

我的观点

你试过吗,

var textbox = $(event.target);

或者你可以这样做,

OP观点

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

我的观点

select: setupRow;

然后

var textbox = this; // just a guess... wait.. 

答案 1 :(得分:0)

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 autocomplete插件。如果是的话,你可以像这样进行检索。

$('.ui-autocomplete-input')

否则,您可以为这些文本框设置特定的类,并通过该类访问这些文本框。

答案 2 :(得分:0)

好的,使用

更近了一步
inputs.bind("autocompleteselect", setupRow);

现在setupRow火了。

现在看来,成功的回调转换了数据,我得到了回复。我需要找到一种方法,在下拉列表中显示正确的值,而不会破坏请求响应......

有什么想法吗?