Bootstrap-tagsinput标系统使用心得
最近工作中由于需求使用到了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标系统使用心得的更多相关文章
- MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统
文章来源: Slark.NET-博客园http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-grid.html 上一节:ASP.NET MVC ...
- Bootstrap的栅格系统
Bootstrap的栅格系统 上一节:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 源码下载:点我下载 要做一个完整的系统,除了需要MVC这样的B/S框架及EF这 ...
- Bootstrap 12 栅格系统
栅格系统简介 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多 12 列.它包含了易于使用的预定义类,还有强大的mix ...
- bootstrap中栅格系统的原理
1.基本结构 Bootstrap采取12列的栅格体系,根据主流设备的尺寸进行分段,每段宽度固定,通过百分比和媒体查询实现响应式布局. Bootstrap划分了四种尺寸:超小屏(手机).小屏(平板竖屏) ...
- bootstrap课程2 bootstrap的栅格系统的主要作用是什么
bootstrap课程2 bootstrap的栅格系统的主要作用是什么 一.总结 一句话总结:响应式布局(就是适应不同的屏幕,手机,平板,电脑) 1.bootstrap的栅格系统如何使用? row ...
- Bootstrap之栅格系统
bootstrap 移动优先 中文官网 http://www.bootcss.com/ 1.基本模板 <!DOCTYPE html> <html lang="en&quo ...
- 深入理解BootStrap之栅格系统(布局)
1.栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...
- Bootstrap(5)栅格系统
一.移动设备优先 在 HTML5 的项目中,我们做了移动端的项目.它有一份非常重要的 meta,用于设置屏幕和设备等宽以及是否运行用户缩放,及缩放比例的问题. //分别为:屏幕宽度和设备一致.初始缩放 ...
- Bootstrap学习--栅格系统
响应式布局页面:即同一套页面可以兼容不同分辨率的设备. Bootstrap依赖于栅格系统实现响应式布局,将一行均分为12个格子,可以指定元素占几个格子. 实现过程 1.定义容器,相当于之前的table ...
随机推荐
- Mac使用bootcamp安装win系统花屏解决方法
15年11'乞丐版air装win屏幕花屏,很郁闷,先后找了网上很多方法,最终总结出了一个比较折中的方法,不玩游戏不使用大型3D的可以参考. 1 花屏现象 2 解决方法 2.1 禁用驱动 2.2 使用M ...
- 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO
以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...
- 将python自动转换为.exe文件
使用py2exe包进行转换.py2exe怎么装的可以网上另查.时间久了,记不太清了...... 这个程序可以把自己进行转换.但是没法运行....其实只要是需要修改自身的程序打包后都没法运行. # -* ...
- Linux入门第四天——shell基础
一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...
- 20155325 加分作业 实现pwd
要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 准备 思路 问题 1.如何获取当前目录的节点号 Linux ...
- 20155329实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 1实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 2. 初步掌握单元测试 ...
- 【BZOJ2589】[SPOJ10707]Count on a tree II
[BZOJ2589][SPOJ10707]Count on a tree II 题面 bzoj 题解 这题如果不强制在线就是一个很\(sb\)的莫队了,但是它强制在线啊\(qaq\) 所以我们就用到了 ...
- CF 868 F. Yet Another Minimization Problem
F. Yet Another Minimization Problem http://codeforces.com/contest/868/problem/F 题意: 给定一个长度为n的序列.你需要将 ...
- youtube视频下载和搬运的方法
youtube全球最大的视频网站, 全世界每天有三分之一的网民在youtube上观看视频, 可是大部分人不知道, 在这些网民有一小部分人是依靠youtube生存的, 他们上传视频到youtube, y ...
- windows环境下apache-apollo服务器搭建及发布订阅测试
查证了一些资料之后,发现 apache-apollo服务器使用的人还是挺多的,资料也比较齐全,所以直接选择 apache-apollo了,具体性能如何,先用起来再说吧: 1.下载 apache-apo ...