Twitter类型自动完成动态添加输入

问题描述 投票:6回答:2

我在我的网站上使用Twitter typeahead,它工作正常。但是当我尝试动态添加新输入时,它不起作用。可能是什么问题呢?

谢谢你的回复。

    var custom = new Bloodhound({
    datumTokenizer: function(d) { return d.tokens; },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: 'http://'+window.location.hostname+'/invoice/loadItemOption?query=%QUERY'
    });

    custom.initialize();

    $('.typeahead_option_items').typeahead(null, {
          name: 'item_title[]',
          displayKey: 'invoice_item_option_title',
          source: custom.ttAdapter(),
          hint: (App.isRTL() ? false : true),
    }).on('typeahead:selected', function (obj, value) {
        console.log(value.invoice_item_option_title);
    });
jquery typeahead.js twitter-typeahead
2个回答
17
投票

我做的是把它包装成一个函数

function typeahead_initialize() {
 var custom = new Bloodhound({
    datumTokenizer: function(d) { return d.tokens; },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: 'http://'+window.location.hostname+'/invoice/loadItemOption?query=%QUERY'
    });

    custom.initialize();

    $('.typeahead_option_items').typeahead(null, {
          name: 'item_title[]',
          displayKey: 'invoice_item_option_title',
          source: custom.ttAdapter(),
          hint: (App.isRTL() ? false : true),
    }).on('typeahead:selected', function (obj, value) {
        console.log(value.invoice_item_option_title);
    });
}

typeahead_initialize();

而且在添加动态输入之前我运行

$('.typeahead_option_items').typeahead('destroy');

并在创建元素之后

typeahead_initialize();

适合我,希望这会有所帮助。


0
投票

我有一个非常简单的方法来解决它,使用Function而不是Dynamic输入。我的意思是:typeahead =“计算输入中的项目($ viewValue)”


关于在$ scope.dynamicArrayInput中使用typeahead =“item的根本问题是:当模型更改 - > ng-change和typeahead fire事件同步开始因此,当calculateInput()函数执行某些操作以获取动态输入时,typeahead表示模型”跳转到$ scope.dynamicArrayInput,然后得到$ viewValue RIGHT NOW“。然后在[]中过滤$ viewValue。当calculateInput()完成他的工作时,typeahead已经找不到任何内容,并且在你再次更改模型之前不会触发事件。所以你总是在(lastest - 1)动态数组中过滤typeahead。

© www.soinside.com 2019 - 2024. All rights reserved.