2011-01-28 43 views
1

我不知道如何做一件非常簡單的事情:獲取AutoComplete YUI3小部件的當前值。我有以下的標記:如何從YUI自動填充獲取值?

<label for="targets">Target:</label> 
<input id="targets" type="text"></input> 
<label for="packets">Packet:</label> 
<input id="packets"></input> 

我有以下的Javascript:

YUI().use("autocomplete", function(Y) { 
    Y.one('body').addClass('yui3-skin-sam'); 
    var tgt = new Y.AutoComplete({ 
    inputNode: '#targets', 
    source: '/telemetry/targets?target={query}', 
    render: true 
    }) 
    var pkt = new Y.AutoComplete({ 
    inputNode: '#packets', 
    source: '/telemetry/packets?target='+tgt.get('value')+',packet={query}', 
    render: true 
    }) 
}); 

tgt.get(「值」)總是不管我已經輸入返回一個空字符串到#targets輸入。我究竟做錯了什麼?

回答

4

tgt.get('value')是獲取inputNode的當前值的正確方法,但在此情況下,它將在實例化時設置source屬性的值時立即調用,而不是稍後進行請求。由於此時沒有輸入任何文本,因此該值爲空。

如果你想第二個自動完成實例的「目標」參數設置爲第一個自動完成實例的inputNode的當前值,做的最好的事情是設置一個自定義requestTemplate爲pkt例如:

var pkt = new Y.AutoComplete({ 
    inputNode: '#packets', 
    source: '/telemetry/packets', 
    requestTemplate: function() { 
    return '?query=' + encodeURIComponent(pkt.get('query')) + 
     '&target=' + encodeURIComponent(tgt.get('value')); 
    }, 
    render: true 
}); 

這將確保每個請求的查詢字符串在請求時生成,而不是在實例化時生成。

+0

我從我的查詢返回了很多結果。我沒有看到任何選項來啓用滾動,但谷歌搜索發現一些設置CSS的例子。這是首選的方法嗎? – Jason 2011-01-28 20:35:26

相關問題