【问题标题】:Twitter TypeAhead.js not updating inputTwitter TypeAhead.js 不更新输入
【发布时间】:2013-10-15 17:09:52
【问题描述】:

我在我的 bootstrap 3 项目中使用 Twitter's TypeAhead.js 库。看起来很棒,但是,我的输入字段有问题。一旦我开始填写它,就会触发预输入并相应地出现建议框。但是,在选择任何条目后,输入字段根本没有填写。有人可以帮帮我吗?

这是我现在正在工作的代码:

HTML:

<input type="text" class="form-control typeahead" name="txtCliente" id="txtCliente" placeholder="Cliente ou Aterro de Destino" value="" maxlength="100" required>

Javascript 代码 - 激活字段:

$('.typeahead').typeahead({
  name: 'parceiro',
  remote: '../api/index.php/parceiro/busca/%QUERY',
  template: [                                                                 
  '<p>{{RAZAO_SOCIAL}}</p>',                              
  '<p>{{DESCRICAO_TIPOPARCEIRO}}</p>',                                      
  '<p>{{CNPJ}}</p>'                         
  ].join(''),                                                                 
  engine: Hogan 
});

最后,从服务器返回的 JSON:

[{
    "ID":"17",
    "TIPOPARCEIRO":"C",
    "DESCRICAO_TIPOPARCEIRO":"CLIENTE",
    "RAZAO_SOCIAL":"VINICIUS SOARES BATISTA",
    "CNPJ":"12344123213123"
}]

提前致谢!

[编辑]

感谢@bass-jobsen,我已经能够部署它。正如他所说,秘密在于 TypeAhead 提供的 filter() 函数。波纹管是这种功能的书面代码。

...

 $('#txtCliente').typeahead({                                
  header: '<b>Clientes</b>',
  template: [
  '<span>{{RAZAO_SOCIAL}}<BR>{{CNPJ}}</span>',
  ].join(''),
  limit: 3,
  remote: {
    url: '../api/index.php/parceiro/busca/%QUERY',
    filter: function(parsedResponse) {
      var dataset = [];
      for(i = 0; i < parsedResponse.length; i++) {
        if(parsedResponse[i].TIPOPARCEIRO == "C" || parsedResponse[i].TIPOPARCEIRO == "A"){
        dataset.push({
          ID: parsedResponse[i].ID,
          RAZAO_SOCIAL: parsedResponse[i].RAZAO_SOCIAL,
          DESCRICAO_TIPOPARCEIRO: parsedResponse[i].DESCRICAO_TIPOPARCEIRO,
          CNPJ: parsedResponse[i].CNPJ,
          value: parsedResponse[i].RAZAO_SOCIAL
        });
        }
      }
      return dataset;
    },
  },
  engine: Hogan
})

...

【问题讨论】:

    标签: javascript jquery twitter-bootstrap-3 typeahead.js


    【解决方案1】:

    您的数据集没有 value 属性(也缺少 tokens 属性)。

    来自文档:

    构成数据集的各个单元称为基准。这 基准的规范形式是具有 value 属性和 令牌属性。 value 是代表底层证券的字符串 数据和标记的值是单个单词字符串的集合 这有助于 typeahead.js 将数据与给定查询匹配。

    还可以查看http://twitter.github.io/typeahead.js/examples/ 上的“Twitter 开源项目”示例。这里的 json 返回是一个对象数组,例如:

     {
        "name": "typeahead.js",
        "description": "A fast and fully-featured autocomplete library",
        "language": "JavaScript",
        "value": "typeahead.js",
        "tokens": [
          "typeahead.js",
          "JavaScript"
        ]
      }
    

    如果您无法更改您的 JSON 响应,您可以使用远程的过滤器选项来构造有效数据:

    $('.typeahead').typeahead({                                
      name: 'is',                                    
      remote: {url:'database2.php?q=%QUERY', filter: function(data){
    
        for (var i = 0; i < data.length; i++) {
    
          data[i].value =  data[i].RAZAO_SOCIAL;
          data[i].tokens = new Array(data[i].RAZAO_SOCIAL,data[i].DESCRICAO_TIPOPARCEIRO);
        }  
      return data;}
    
      },
      template: [ 
      '<p>{{RAZAO_SOCIAL}}</p>',                              
      '<p>{{DESCRICAO_TIPOPARCEIRO}}</p>',                                      
      '<p>{{CNPJ}}</p>'            
      ].join(''),
      filter: 'testfilter',                                                                 
      engine: Hogan                                                                 
    });
    

    【讨论】:

    • 非常感谢@BassJobsen!我刚刚更新了代码以实现filter 函数,它没有任何缺陷!我非常感谢您的时间和帮助。祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多