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
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 贪吃蛇(C语言实现)

    贪吃蛇(C语言实现)文章目录游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数…

    2022年5月9日
    40
  • ldap 统一认证 java_如何在你的系统里集成LDAP统一认证「建议收藏」

    一、为什么需要统一认证日常办公经常会有多套系统,如果各个系统各自维护一套用户认证,用户需要记住多个用户名密码。系统各自管理用户认证的方式,不但会有重复建设的问题,用户体验也会差,经常会有用户忘记密码的情况。二、LDAP统一认证是什么LDAP是LightweightDirectoryAccessProtocol(轻量级目录访问协议)的缩写,它是基于X.500标准的轻量组播目录访问协议。目录…

    2022年4月17日
    73
  • win10系统显示打印机未连接到服务器,Win10系统连接打印机显示未指定设备的解决教程…

    win10系统显示打印机未连接到服务器,Win10系统连接打印机显示未指定设备的解决教程…打印机是我们在Win10打印机显示未指定设备的解决方法:1.运行Windows疑难解答–在Windows搜索框中键入疑难解答>单击搜索结果中的疑难解答。–单击右窗格中的“打印机”>选择“运行疑难解答”。–等待进程进行并重新启动计算机以查看是否解决了问题。2.更新打印机驱动程序–按键盘上的Windows徽标键+R>在“运行”框中键入devmgmt.msc,然后按Enter…

    2022年6月13日
    102
  • JAVA反射机制

    JAVA反射机制

    2021年11月15日
    42
  • Linux之Ubuntu18.04安装Java JDK8的三种方式

    JavaJDK在linux系统有两个版本,一个开源版本Openjdk,还有一个oracle官方版本jdk,oracleJDK既可以通过添加ppa源命令行安装,也可以去官网下载jdk压缩包安装。下面分别记录一下这三种安装方式的步骤。安装openjdk1、更新软件包列表:sudoapt-getupdate2、安装openjdk-8-jdk:sudoapt-getin…

    2022年4月7日
    39
  • 【Oracle】LISTAGG 函数的使用

    【Oracle】LISTAGG 函数的使用LISTAGG 函数介绍 listagg 函数是 Oracle11 2 推出的新特性 其主要功能类似于 wmsys wm concat 函数 即将数据分组后 把指定列的数据再通过指定符号合并 LISTAGG 使用 listagg 函数有两个参数 1 要合并的列名 2 自定义连接符号 LISTAGG 函数既是分析函数 也是聚合函数所以 它有两种用法 1 分析函数

    2025年7月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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