2010-07-01 73 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