输入多个字段到html

时间:2017-08-10 04:13:56

标签: javascript jquery typeahead.js

我有这个JSON进入typeahead:

[{"q": "#django", "count": 3}, {"q": "#hashtag", "count": 3}, {"q": "#hashtags", "count": 0}, {"q": "#google", "count": 1}]

我的文件代码使用typeahead

var hashTags = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('q'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '/hashtag.json?q=%QUERY',
remote: {
url: '/hashtag.json?q=%QUERY',
wildcard: '%QUERY'
}
});

$('.search-tag-query').typeahead({
    hint:true,
    highlight: true,
    // autoselect: true,
    minLength:1,
    limit: 10,
},
    {
    name: 'hashTags',
    display: 'q',
    // displayKey: 'count',
    source: hashTags.ttAdapter(),
    templates: {
        empty: 'No results...'
    }
});

我轻松地向我的html下拉菜单提示我从" q"获得的数据。或者"计数"。

问题在于我无法发送它们,正如您在代码中看到的那样。

如何发送两者,以便显示标签和与其相关的帖子数量?

感谢。

3 个答案:

答案 0 :(得分:1)

使用自定义模板

suggestion: function(data) {
    return '<p><strong>' + data.q+ '</strong> – ' + data.count+ '</p>';
}

答案 1 :(得分:1)

您可以使用 <%= select_tag "user_ids", options_from_collection_for_select(User.all, "id", "name", @project.user), { :multiple => true, :size =>10} %> Bloodhound连接$.map()处返回的数组。

然后,您可以在传递给Array.prototype.concat()的{​​{1}}对象的suggestion属性中过滤建议。在stacksnippets中,templates.typeahead()属性都会附加到HTML,作为qcount值的每次匹配的建议。

&#13;
&#13;
q
&#13;
count
&#13;
$(function() {
var data = [{"q": "#django", "count": 3}, {"q": "#hashtag", "count": 3}, {"q": "#hashtags", "count": 0}, {"q": "#google", "count": 1}];



var suggestions = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  local: $.map(data, function(d) {
    return {
      value: d.q,
      suggest: d
    }
  })
  // here we concatenate the two arrays
  .concat($.map(data, function(d) {
    return {
      value: d.count,
      suggest: d
    }
  }))
});

suggestions.initialize();

$(".bs-example .typeahead").typeahead({
        minLength: 1,
        hint: true,
        highlight: true
    }, {
        name: "suggestions",
        displayKey: "value",
        templates: {
            suggestion: function(data) {
                 console.log(data);
                 var details = "<div class=resultContainer>" 
                               + data.value 
                               + "<br>"
                               + (data.suggest.count == data.value 
                               ? data.suggest.q 
                               : data.suggest.count)
                               + "</div>";
                 return details
            }
        },
        source: suggestions.ttAdapter()
});

})
&#13;
&#13;
&#13;

答案 2 :(得分:0)

感谢所有人,现在我了解它是如何工作的,特别是对Madalin Ivascu。我改进了我的代码,它通过这种方式工作:

$.ajax({
   url: 'wallets',
   data: 'myAnyParameterIfNeeded=parameterValue',
   success : function(response) {
                var results = JSON.parse(response);
                // here you can use for loop for iterating into *results*
                var rowOneName = JSON.stringify(results[0]['name']);
           }
   error : function(e){
               alert('HTTP error number=' + e.status);
           }
})