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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PYthon——plt.scatter各参数详解

    PYthon——plt.scatter各参数详解 最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下:1、scatter函数原型2、其中散点的形状参数marker如下:3、其中颜色参数c如下:4、基本的使用方法如下:[python] viewplain copy#导入必要的模块   import numpy as np   import mat…

    2022年6月29日
    82
  • VS无法打开源文件及无法打开链接库文件的解决方法

    VS无法打开源文件及无法打开链接库文件的解决方法一、无法打开源文件依次点击“项目——配置属性——C/C++——常规”,在“附加包含目录”中加入.h文件所在的文件夹路径二、无法打开文件“XXX.lib”1、依次点击“项目——配置属性——链接器——常规”,在“附加库目录”中加入.lib所在的文件夹的路径 2、在“链接器”中找到“输入”,在“附加依赖项”中加入需要加入的xxx.lib;(要用;和其他链接库分

    2022年6月22日
    778
  • Python值传递还是引用传递

    Python值传递还是引用传递Python 值传递还是引用传递 Python 作为一门动态语言 变量本身的类型是不固定的 因此更加灵活 那 Python 到底是值传递还是引用传递呢 问题引出本人在本周写代码时 遇到这么一个让我吃惊的问题 问题可以抽象如下 deffunc val1 val2 val1val2 append 1 a 一系列对 a 的操作 b afunc a

    2025年6月11日
    3
  • js正则截取指定字符串_java正则表达式提取字符串

    js正则截取指定字符串_java正则表达式提取字符串一、javascript正则表达式的基本知识1javascript正则对象创建和用法声明javascript正则表达式varreCat=newRegExp(“cat”);你也可以varreCat=/cat/;//Perl风格(推荐)2学习最常用的testexecmatchsearchreplacesplit6个方法1)test检查指定的字符串是否存在vardata=“123123″;varreCat=/123/gi;alert(r

    2026年1月30日
    3
  • Windows 安装svn(出错已解决)和MySQL安装[通俗易懂]

    Windows 安装svn(出错已解决)和MySQL安装[通俗易懂]1.https://tortoisesvn.net/downloads.html网站下载2.安装的时候如果出现下图的报错打开这个网站https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=49062,会自动帮你下载下载完成后安装即可3.没有特殊需求则默认安装4.出现这个则安装成功MySQL安装…

    2022年8月19日
    8
  • 退出多个activity的方法

    退出多个activity的方法

    2022年2月21日
    33

发表回复

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

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