2010-07-01 72 views
0

有了这个代码:问题与jQuery ui`s自动完成选择回调(1.8)

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,因为这些文本框是多个并且交互地动态生成。还是有另一种方式来做同样的事情?

感谢您的帮助!

+0

你忘了放;在ajax声明结束时。 – Kai 2010-07-01 04:15:02

+0

我不这么认为...... 你需要向下滚动一下。 – Jan 2010-07-01 04:23:02

+0

sry ..我的意思是..在成功处理程序的声明结束.. – Kai 2010-07-01 04:28:26

回答

0

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

inputs.bind("autocompleteselect", setupRow); 

现在setupRow火灾。

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

任何想法?

+1

你应该追加原始问题一个“编辑:”,而不是发布作为一个答案,以保持相关的信息在一起,并没有被可能的答案upvoted模糊。 – 2010-07-01 12:46:57

+1

好的,我会这样做的 – Jan 2010-07-01 12:57:17

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自动完成插件。如果是的话,你可以这样检索。

$('.ui-autocomplete-input') 

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

+0

对不起,我认为你没有看到整个代码,它是一个可滚动的div,可能已经删除了重要部分。 $('。ui-autocomplete-input')会给我所有的人,但我只需要活动的。 – Jan 2010-07-01 04:28:13

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.. 
+0

还没有,因为我从来没有达到那段代码。但听起来很合理! – Jan 2010-07-01 04:37:43

+0

是的,我使用setupRows的方式,但只是为了让超级确定一切正确,我把它包装在这个虚拟功能中...... _this_也可以工作,你是对的... – Jan 2010-07-01 04:45:24