Bootstrap-tagsinput标系统使用心得

Bootstrap-tagsinput标系统使用心得

最近工作中由于需求使用到了Bootstrap-tagsinput标系统,我的需求是:

1)能够从后台数据库获取标签信息展示到前端页面;

2)能够实现输入标签添加到后台,并ajax刷新页面;

3)能够实现点击删除变迁按钮,到后台进行逻辑删除,并ajax刷新页面;

但是网上大部分资料都是只展示标签,于是就自己查看官方文档,花了两天时间终于能够实现。

目前能够实现的功能

1)标签动态添加,添加完点击确定,自动刷新页面,更新到已有标签。

2)标签动态删除,点击x标识,会减去相应标签括号后面的积分1,当积分为0或者0以下时,不再显示标签。(删除是逻辑删除,后台数据库isdelete标识,显示使用条件查询)

先上一个展示效果:

Bootstrap-tagsinput标系统使用心得

 

1)后台数据库展示到前端页面:

 

  <script>
            // 预加载,
            var citynames = new Bloodhound({
              datumTokenizer: Bloodhound.tokenizers.obj.whitespace('tag'),
              queryTokenizer: Bloodhound.tokenizers.whitespace,
              prefetch: {
                        url: 'assets/citynames.json',  // 可以动态请求需要预加载的数据
                        filter: function(tags) {
   return tags}
     
                    }
                });
     
        // 展示标签
        citynames.initialize();
        var elt = $('#results_tag');  //通过id获取标签对象
        elt.tagsinput({
            itemValue: 'value',  // 展示标签必须有的字段
            itemText: 'text',  // 展示标签必须有的字段
            typeaheadjs: {
            name: 'citynames',
            displayKey: 'tag',
            valueKey: 'tag',
            source:
                $.get("/person/tag/?p="+{
   { r.uuid }},function (data) {  // 展示标签的数据源,可以通过ajax动态加载
                        if (data){
     
                            results_json = jQuery.parseJSON(data.results_tag);
     
                            num = results_json.length;
                            for (var i=0; i<num; i++)
                              {
                                  elt.tagsinput('add', {
   "value":results_json[i].tag_id, "text":results_json[i].tag +'('+results_json[i].probability +')', "continent": "Tag"});
                              }
                        }  //if
                    }) //ajax
          }
        });
     
        
        // 新增标签
        $('input[data-role="tagsinput"]').tagsinput('refresh',{  // 新增标签input
            typeaheadjs: {
            name: 'citynames',
            displayKey: 'tag',
            valueKey: 'tag',
            cancelConfirmKeysOnEmpty: true,
            source:citynames.ttAdapter()
            }
            });
        $('button[data-loading-text="Saving..."]').click(function () { // 新增标签按钮和ajax函数
            var tag = $('#tags').val();
            params = {
   'tag':tag,'person_id':{
    { r.uuid }}};
            $.post("/person/add_tag/", params,function (data) {
     
                if (data.res == 1){
                    location.reload()
                } //if
            }); // post
        }); // click
     
     
     
       // 删除标签
        elt.on('beforeItemRemove', function(event) {
            var tag = event.item;
           // Do some processing here
            var tag_id = tag.value;
            console.log(tag_id);
           if (!event.options || !event.options.preventPost) {
               params = {
   'tag_id':tag_id}
              $.post('/person/remove_tag/', params, function(response) {
                  if (response.res == 1){
                      location.reload() // 刷新页面
                  }
              });
           }
    });
     
        </script>

 

①展示标签可以先获取input标签对象

var el = $('#id')

这种方式去获取input标签对象,然后对input标签对象进行操作。

②新增标签就不能通过上面那种方式获取input标签对象去操作,这是问题就来了,如果直接使用以下代码,会和展示标签重合,形成Input框内嵌input框

$("input").tagsinput('items')

这种效果就不是我们想要的了..

.Bootstrap-tagsinput标系统使用心得

 

既不能通过赋值对象的方法去获取新增input标签,又不能直接使用input标签框获取,可把我急死了…搜寻许久,终于找到了办法,

可以给input标签赋值一个属性:data-role=”tagsinput”,然后指定获取标签的时候可以这样:

$("input[data-role='tagsinput']").tagsinput('items')

这样就完美解决啦~

ajax视图函数:

   @login_required(login_url='/login/')
    def get_person_tag(request):
        """在tag_person表取出标签"""
        id = request.GET.get('p')
        (results_tag, count_tag) = getPersonTags(int(id))
        print('【查询到已有标签】:',results_tag)
        results_tag = json.dumps(results_tag)  # 将获取到的数据转换为json数据
        return JsonResponse({
   'results_tag':results_tag})

查询数据库:

  def getPersonTags(person_id):
        """获取tag_person表中tag,tag_id,probability(分数)"""
        conn = connectDB()
        with conn.cursor() as cursor:
            sql = "select distinct tag,ROUND(sum(probability),2) as probability,tag_id from tag_person WHERE person_id = '%s' and probability > 0" % person_id
            sql = sql + " GROUP BY tag DESC"
            count = cursor.execute(sql)
            results = cursor.fetchall()
            cursor.close()
            conn.close()
            return results, count

最终还是建议多看官方文档…

有什么不懂得可以多交流…

原文:https://blog.csdn.net/weixin_40475396/article/details/79046670
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112547.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java calendar获取年_Java Calendar获取年、月、日、时间,设置年、月、日

    java calendar获取年_Java Calendar获取年、月、日、时间,设置年、月、日JavaCalendar获取年、月、日、时间Calendarc=Calendar.getInstance(TimeZone.getTimeZone(“GMT+08:00”));//获取东八区时间intyear=c.get(Calendar.YEAR);//获取年intmonth=c.get(Calendar.MONTH)+1;//获取月份,0表示1月份intday=c.get(Calendar.DAY_OF_MONTH);//获取当前

  • Python处理Excel数据-pandas篇

    Python处理Excel数据-pandas篇Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(paneldata),这是计量经济学的数据集术语,它们包括了对同一个体的在多个时期上的观测。它的名字是短语“Pythondataanalysis”自身的文字游戏。目录Python处理Excel数据-pandas篇一、安装环境1、打开以下文

    2022年10月29日
  • python 之免费ip代理池[通俗易懂]

    python 之免费ip代理池[通俗易懂]基于proxy_pool,部署了一个开放的免费ip代理池,提供出来供大家使用。数据有效性每2分钟更新一次。地址:http://proxy.linuxdba.ltd/all/开源项目地址:https://github.com/jhao104/proxy_pool

  • 2022年双非上岸北京理工大学软件工程经验

    2022年双非上岸北京理工大学软件工程经验感想很久之前就想写一篇文章来记录自己这段考研的辛苦历程了,感谢这一路陪伴我的朋友对我的鼓励支持,软工今年是前30去校本部,后35名去唐山研究院,软工相比于前几年来说一直在缩招,20年招95个,21年招74个,今年招65个,所以23今年想报的要做好会缩招的准备,我最终是去了唐山研究院,但是这对我本科双非的学生来说已经知足了。今年2022年被称为考研元年,难度可以说是极其高了,想要上岸不容易,从如今考研的形式来看,未来考研将会越来越难,希望学弟学妹们仔细认真的选择院校,可以通过关注一些公众号像王道论坛,

  • Vue、Element-ui项目中如何使用Iconfont(阿里图标库)[通俗易懂]

    Vue、Element-ui项目中如何使用Iconfont(阿里图标库)[通俗易懂]我们使用element-ui、vue开发网站的时候,往往图标是起着很重要的作用。2018-11-9更新1.傻瓜式引用:由于这种方法及其简单省去了很多繁琐的步骤,a.引入项目生成的,图标地址。b.使用推荐使用这种,详情请看文档!!文档够详细的了。http://www.iconfont.cn/help/detail?spm=a313x.7781069.1998910419.d8cf4…

  • win10安装PHP环境

    下载地址:https://windows.php.net/downloads/releases/然后将下载的文件解压到本地目录,我放在F:\wamp\目录下的php文件夹(不要下载非线程安全的版本,里面没有phpX(5,7)apache2_4.dll的拓展文件),配置apache的时候要用到将php配置在apache里,没安装apache环境的参考:https://blog.csdn….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号