2012-02-29 134 views
48

我是Bootstrap Twitter框架的新手,我需要使用bootstrap-typeahead.js來自動完成,但我還需要獲取用戶爲預輸入。bootstrap-typeahead.js在選擇事件中添加監聽器

這是我的代碼:

<input type="text" class="span3" style="margin: 0 auto;" 
        data-provide="typeahead" data- items="4" 
        data-source='["Alabama","Alaska"]'> 

我怎樣才能添加一個偵聽器,以獲得從類型預輸入所選的值,並通過它的功能?例如,當我使用ExtJs時,我應用了這種結構:

listeners: { 
    select: function(value){ 
    ........ 
    } 
} 

我該怎麼做類似於typeahead?

回答

0

嘗試this fork of typeahead。它給你一個選擇事件,異步人口和更多!

+1

預輸入現在有'afterSelect',看到我的回答 – 2015-09-16 11:13:59

165

你應該使用「更新」:

$('#search-box').typeahead({ 

    source: ["foo", "bar"], 

    updater:function (item) { 

     //item = selected item 
     //do your stuff. 

     //dont forget to return the item to reflect them into input 
     return item; 
    } 
}); 
+1

爲什麼這是-1級?我已經嘗試了很多類型的叉子,沒有任何工作。這個解決方案馬上工作... – gpasse 2012-08-01 17:40:12

+7

這是一個正確的答案。想知道爲什麼它沒有記錄在Twitter Bootstrap文檔中。 – 2012-08-10 22:53:13

+2

是的,它使用2.1版本。 – egis 2012-08-22 00:40:41

4

我已經能夠通過簡單地看元素的‘改變’事件,就選擇這Twitter的引導火災事先鍵入的內容得到這個工作。

var onChange = function(event) { 
    console.log "Changed: " + event.target.value 
}; 

$('input.typeahead').typeahead({ source: ['test1', 'test2'] }); 
$('input.typeahead').on('change', onChange); 

當用戶選擇test1時,輸出'Changed:test1'。

注意:即使沒有找到匹配項,當用戶按下「Enter」鍵時也會觸發事件,因此您必須決定這是否是您想要的。尤其是,如果用戶輸入「te」然後單擊「test1」,您將獲得「te」的事件和「test1」的事件,您可能想要刪除該事件。

(版本2.0.2 Twitter的引導事先鍵入的內容)

51

在V3 Twitter的引導預輸入將被丟棄與Twitter的預輸入的更換(其具有以下特徵:您想和更多)

https://github.com/twitter/typeahead.js

用法是這樣的:

jQuery('#autocomplete-input').on('typeahead:selected', function (e, datum) { 
    console.log(datum); 
}); 
+0

但我怎麼使用typeahead:選擇? – adamnyberg 2013-06-30 11:09:15

+3

此更新有幫助嗎? – 2013-07-01 12:05:10

+3

我建議使用'.on('typeahead:選擇typeahead:autocompleted'...'還可以在用戶按Tab鍵時捕獲自動填充,如下面@ philippinedev的回答中所述。 – 2013-10-19 16:33:14

17

感謝P.scheit你的答案。讓我把這個添加到你的解決方案中,該解決方案在用戶按Tab鍵時處理自動完成。

jQuery('#autocomplete-input').on('typeahead:selected', function (e, datum) { 
    console.log(datum); 
}).on('typeahead:autocompleted', function (e, datum) { 
    console.log(datum); 
}); 
+0

我不認爲我們需要單獨使用函數我給了一個修改後的版本,謝謝初始輸入.. – Abs 2015-11-22 06:25:20

0
$('input.typeahead').typeahead({ 
    source: ['test1', 'test2'], 
    itemSelected: function(e){ 
     ---your code here--- 
    } 
}); 
+0

請解釋你的代碼 – 2014-10-03 14:38:59

+0

// Twitter Bootstrap Typeahead插件 // v1.2.2 // https://github.com/tcrosen/twitter-bootstrap -typeahead – 2014-10-29 10:13:53

15

可以使用afterSelect

$('#someinput').typeahead({ 
    source: ['test1', 'test2'], 
    afterSelect: function (item) { 
     // do what is needed with item 
     //and then, for example ,focus on some other control 
     $("#someelementID").focus(); 
    } 
}); 
+1

謝謝你!完美的工作。 – brunoramonalmeida 2017-02-07 22:24:28

1

繼承人與標籤式和選擇的多事件的解決方案:

$('#remote .typeahead').on(
    { 
     'typeahead:selected': function(e, datum) { 
      console.log(datum); 
      console.log('selected'); 
     }, 
     'typeahead:autocompleted': function(e, datum) { 
      console.log(datum); 
      console.log('tabbed'); 
     } 
});