jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 在单个页面中使用多个bootstrap Typeahead字段?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经修改了bootstrap typeahead,以便在选择typeahead元素时将id与元素相关联.

function addTypeahead(element)
 {
     var labels,mapped;
     var myElement = $(element);
     console.log(myElement);
    myElement.typeahead({
        source: function (query,process){
            $.post('/edit/unassigned_list',{q: query},function(data){
                labels = [];
                mapped = {};
                //console.log(data);
                $.each(data,function(i,item){
                    var query_label = item.name;
                    mapped[query_label] = item;
                    labels.push(query_label);
                });

                process(labels);    
            },"JSON");
        },updater: function (query_label){
            var item = mapped[query_label];
            myElement.attr('person_id',item.id);
            return query_label;
        }
        });

 }

这很有效.但是,当我尝试将其设置为跨多个元素时,我最终会在第一个元素上使用它(我认为因为我不小心让它泄漏到全局范围或者我做了一些可怕的错误).我给你举个例子

我有多个标记为#project-auto- *的项目元素,我在我的文档(就绪)部分中运行以下代码

$("[id^=project-auto-]").each(function(index,element){
        var local = $(element);
        addTypeahead(element);
    });

如果我只是遍历和控制台记录他们都显示的每个元素.但是,如果我尝试将typeahead应用于其中任何一个,则只有第一个具有typeahead(并且它正常工作),但循环在第一个应用程序之后终止.我一直在挠头,玩不同的范围(因此为什么所有的范围嵌套)无济于事.我做过一些我完全错过的超级傻事吗?

解决方法

本质上,我使用匹配自动完成的模式遍历id.然后我将Bloodhound和typeahead初始化为符合模式标准的元素.我从用于搜索的刀片模板上设置的js变量中获取了search_url.
请参阅以下代码

$(function () {

  var $element = $('[id$=filter_autocomplete]');

  if ($element.length > 0) {
    // Loop through each element that is autocomplete
    $.each($element,function (index,element) {

       // $form      obj       name of the closest form
       // formData   String    name of the resource making the request
       // paramname  String    name of the String field
       // primaryKey String    name of the priMary key
       // id         String    id of the element

      var $form = $(element).closest('form');
      var formData = $form.data('resource');
      var paramname = $(element).attr('data-field');
      var primaryKey = $(element).attr('data-primaryKey');
      var id = $(element).attr('id');

      // Sets the bhENGIne as new Bloodhound object
      var bhENGIne = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace(paramname),queryTokenizer: Bloodhound.tokenizers.whitespace,remote: {
          url: search_url + '?value=%QUERY&resource=' + formData +  '&input_id='          + paramname,wildcard: "%QUERY"
        }
      });

      // Set up typeahead for each element
      $(element).typeahead(null,{
        name: paramname,display: paramname,minLength: 0,highlight: true,hint: true,source: bhENGIne.ttAdapter(),templates: {
          empty: [
            '<div class="no-items">' +
            '<p class="alert alert-danger">','<strong>No Items Found</strong>','</p></div>'
          ].join('\n')
        }
      }).on('typeahead:SELEcted',function (obj,datum) {
        // Set the hidden priMary key field
        $("#hidden\\|" + paramname).val(datum[primaryKey]);
      });
    });
  }
});

大佬总结

以上是大佬教程为你收集整理的jquery – 在单个页面中使用多个bootstrap Typeahead字段?全部内容,希望文章能够帮你解决jquery – 在单个页面中使用多个bootstrap Typeahead字段?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。