2011-05-23 44 views
1

我試圖做一個管理界面,可以選擇不同種類的模型,然後將它們保存爲一個新的對象。原型多個自動完成

Event.observe($('modelSearch'),'focus',function(){ 
    new Ajax.Autocompleter('modelSearch', 'autoCompleteModel', 'xxx', 
    { 
     paramName: "q", 
     indicator: "makeWaitPic", 
     parameters: "previusId=" + $('previusModelId').getValue(), 
     afterUpdateElement: function(text, li) 
      { 
       if(li.id != '') 
        $('modelId').value = <AjaxReturnValue>; 
       else 
        $('modelSearch').value = ''; 
      } 
    }); 
}); 

我遇到的問題是,當我有一個自動完成,取決於另一個自動完成我得到一個問題。第一個自動完成讓我們選擇一個模型,並將選定的模型ID存儲在我隱藏的輸入字段中。此值是正在使用的第二自動完成,以便它知道它應該在數據庫表

問題1:如果我同時創建自動完成對DOM:加載它們會讀取輸入值有前已設置。因此第二次自動完成將不起作用。

問題2:如果我創建自動完成觀察:焦點,他們將讀取每次新鮮的值,但也將創建多個實例自己的每次一個焦點自動完成字段。

我可以以任何方式使自動完成讀取輸入值新鮮每次我使用它,只有初始化一次?或者我可以以任何方式銷燬在使用後自動完成的對象,並且下次創建新對象?

我該如何解決這個問題,有什麼想法?

回答

1

我通過每當第一個值發生變化時創建一個新的輸入元素來解決它,從而刪除舊的輸入和綁定到它的自動完成對象。然後創建綁定到新輸入字段的新自動完成。

if($('previousModelId').getValue() != prevId){ 
    $('modelSearch').remove(); 
    $('wrapperId').insert({'top': '<input type="text" id="modelSearch" name="modelSearch" size="30" title="search model here." />'}); 
    initModelSearch(); 
    prevId = $('previousModelId').getValue(); 
} 
+0

我用同樣的想法,但不是刪除輸入元素我只是再次調用相同的功能,以及它工作得很好,即在論證通過的新更新值對象是重新創建。 – 2014-03-05 21:49:56