2010-11-12 105 views
0

如何在jQuery-ui自動完成功能中使用jQuery-ui自動完成中的選定項目?在進一步的jQuery-ui自動完成功能中使用jQuery-ui自動完成變量

例如對於此HTML:

<div class="ui-widget"> 
    <label for="project">Project: </label> 
    <input id="project" /> 
    <label for="phase">Phase: </label> 
    <input id="phase" /> 
    <label for="filename">Project: </label> 
    <input id="filename" /> 
</div> 

我正在使用以下自動填充功能和JSON端點來提供數據。

$(function() { 
$("#project").autocomplete({ 
    source: baseUrl+"json/listtitles", 
    minLength: 2, 
    select: function(event, ui) { 
    } 
}); 
}); 

然後,在該第二自動完成我想利用從第一自動完成功能所選擇的值,並用它來建立用於在第二自動完成(這裏示出爲valueFromFirstAutocomplete)的源屬性中使用的URL字符串。

$(function() { 
$("#phase").autocomplete({ 
    source: baseUrl+"json/listphases/"+valueFromFirstAutocomplete, 
    minLength: 2, 
    select: function(event, ui) { 
    } 
}); 
}); 

回答

2

自定義一個回調的源選項,添加產生額外參數的URL:

$("#project").autocomplete({ 
    source: baseUrl+"json/listtitles", 
    minLength: 2 
}); 
$("#phase").autocomplete({ 
    source: function(request, response) { 
     $.get(baseUrl + "/json/listphases/" + $("#project").val(), request, response); 
    }, 
    minLength: 2 
}); 
+0

這看起來像我後,但我沒有設法讓它工作。看來源函數沒有被調用。或者至少不打印我的調試語句: – Surfrdan 2010-11-12 15:18:26

+0

忽略該評論。它的工作正常。我是個傻瓜。非常感謝Jörn! – Surfrdan 2010-11-12 15:20:35

0

你可以只是把一個在另一個內部....

是否有某種原因,這是行不通的?

$(function() { 
$("#project").autocomplete({ 
    source: baseUrl+"json/listtitles", 
    minLength: 2, 
    select: function(event, ui) { 
     $(function() { 
     $("#phase").autocomplete({ 
      source: baseUrl+"json/listphases/"+ui.item.value, 
      minLength: 2, 
      select: function(event, ui) { 
      } 
     }); 
     }); 
    } 
}); 
}); 

要使用這些獨立,你可以做這樣的事情:

var funclist = { 
    populate1 : function() { 
     $("#project").autocomplete({ 
     source: baseUrl+"json/listtitles", 
     minLength: 2, 
     select: populate2; 
     }, 

    populate2 : function(event,ui) { 
     $("#phase").autocomplete({ 
     source: baseUrl+"json/listphases/"+ui.item.value, 
     minLength: 2, 
     select: populate3; 
    } 
    populate3 : ; // etc 
} 

$(funclist.populate1); 
+0

這看起來像它可能會工作,但我可能想要獨立使用每個自動完成功能,因此將它們包裝在對方內可能不是最好的方法。這是一個變量範圍的情況嗎?我是否應該在函數之外聲明3個變量來保存值並在函數內更新它們? – Surfrdan 2010-11-12 14:31:12

+0

也許,看看如何獨立使用的變化 – Hogan 2010-11-12 14:48:40