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

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

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

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

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

目前能够实现的功能

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

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

先上一个展示效果:

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=; 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 == ){
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 == ){
location.reload() // 刷新页面
}
});
}
}); </script>

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

var el = $('#id')

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

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

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

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

.

既不能通过赋值对象的方法去获取新增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
版权声明:本文为博主原创文章,转载请附上博文链接!

Bootstrap-tagsinput标系统使用心得的更多相关文章

  1. MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统

    文章来源: Slark.NET-博客园http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-grid.html 上一节:ASP.NET MVC ...

  2. Bootstrap的栅格系统

    Bootstrap的栅格系统 上一节:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 源码下载:点我下载 要做一个完整的系统,除了需要MVC这样的B/S框架及EF这 ...

  3. Bootstrap 12 栅格系统

    栅格系统简介 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多 12 列.它包含了易于使用的预定义类,还有强大的mix ...

  4. bootstrap中栅格系统的原理

    1.基本结构 Bootstrap采取12列的栅格体系,根据主流设备的尺寸进行分段,每段宽度固定,通过百分比和媒体查询实现响应式布局. Bootstrap划分了四种尺寸:超小屏(手机).小屏(平板竖屏) ...

  5. bootstrap课程2 bootstrap的栅格系统的主要作用是什么

    bootstrap课程2  bootstrap的栅格系统的主要作用是什么 一.总结 一句话总结:响应式布局(就是适应不同的屏幕,手机,平板,电脑) 1.bootstrap的栅格系统如何使用? row ...

  6. Bootstrap之栅格系统

    bootstrap 移动优先 中文官网  http://www.bootcss.com/ 1.基本模板 <!DOCTYPE html> <html lang="en&quo ...

  7. 深入理解BootStrap之栅格系统(布局)

    1.栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...

  8. Bootstrap(5)栅格系统

    一.移动设备优先 在 HTML5 的项目中,我们做了移动端的项目.它有一份非常重要的 meta,用于设置屏幕和设备等宽以及是否运行用户缩放,及缩放比例的问题. //分别为:屏幕宽度和设备一致.初始缩放 ...

  9. Bootstrap学习--栅格系统

    响应式布局页面:即同一套页面可以兼容不同分辨率的设备. Bootstrap依赖于栅格系统实现响应式布局,将一行均分为12个格子,可以指定元素占几个格子. 实现过程 1.定义容器,相当于之前的table ...

随机推荐

  1. 磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题

    原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...

  2. Docker搭建NSQ实时分布式消息集群

    NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行 ...

  3. em,rem区别比较

    rem是基于html元素的字体大小来决定,而em则根据使用它的元素的大小决定. 注意:很多人错误以为em是根据父类元素,实际上是使用它的元素继承了父类元素的属性才会产生的错觉. 主要区别 em 和 r ...

  4. Java基本修饰符

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) 适用范围<访问权限范围越小,安全性越高> 访问权 ...

  5. 20155206 《Java程序设计》实验四实验报告

    20155206 <Java程序设计>实验三实验报告 实验内容 Android程序设计 实验步骤 part1: Android Stuidio的安装测试: 参考<Java和Andro ...

  6. 20155223 2006-2007-2 《Java程序设计》第4周学习总结

    20155223 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 Java的继承方法与继承类相当于程序间的数值调用,当然还有程序间函数的调动使用. 继 ...

  7. 20155311 《Java程序设计》实验四 (Android程序设计)实验报告

    20155311 <Java程序设计>实验四 (Android程序设计)实验报告 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android.组 ...

  8. 2017-2018-1 20155321 《信息安全系统设计基础》课堂实践——实现mypwd

    2017-2018-1 20155321 <信息安全系统设计基础>课堂实践--实现mypwd 学习pwd命令 pwd命令:输出当前工作目录的绝对路径 还可通过man pwd具体查看pwd的 ...

  9. 20155334 2016-2017-2 《Java程序设计》第十周学习总结

    20155334 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 1.计算机网络概述 (1)路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以 ...

  10. Mysql本地安装多实例后启动遇到的问题

    一.本文紧接上一篇[win10-MySql免安装版-安装/多实例] 在上一篇文章里,安装Mysql解压版后,复制多份到本地,实现了多实例的安装 在后续启动其它实例的时候会遇到一些问题,以下就是自己遇到 ...