【问题标题】:problem with jquery ui`s autocomplete select callback (1.8)jquery ui的自动完成选择回调问题(1.8)
【发布时间】:2010-07-01 04:01:28
【问题描述】:

使用此代码:

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 以进行调试的匿名函数也不会被调用。

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

我还在评论中留下了一个问题:如何进入有自动建议的文本框。不能在此处使用 id,因为这些文本框是多个文本框,并且会以交互方式动态生成。还是有其他方法可以做同样的事情?

感谢您的帮助!

【问题讨论】:

  • 你忘了放;在 ajax 语句的末尾。
  • 我不这么认为...您需要向下滚动一下。
  • sry..我的意思是..在成功处理程序语句的末尾..
  • 好的,没错,但遗憾的是没有解决问题。谢谢!

标签: javascript jquery jquery-ui autocomplete


【解决方案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.. 

【讨论】:

  • 还没有,因为我从未接触过那段代码。但听起来很合理!
  • 是的,我是这样使用 setupRows 的,但为了确保一切正常,我将它包装在这个虚拟函数中...... this 也可以工作,你是对...
【解决方案2】:
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')

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

【讨论】:

  • 抱歉,我认为您没有看到整个代码,它是一个可滚动的 div,可能已经删除了重要部分。 $('.ui-autocomplete-input') 会给我所有这些,但我只需要活动的。
【解决方案3】:

好的,通过使用更接近了一步

inputs.bind("autocompleteselect", setupRow);

现在 setupRow 触发。

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

有什么想法吗?

【讨论】:

  • 您应该在原始问题后面附加一个“编辑:”,而不是将其作为答案发布以将相关信息放在一起,并且不会被可能的答案所掩盖。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2011-11-16
  • 2017-06-19
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多