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 ...
随机推荐
- 【深度优先搜索】NOIP2017_D2T1 洛谷3958奶酪
这道题的写法大体有两种:大法师DFS和并查集,两种算法都不难,本篇博客主要讲解DFS,而且测试数据特水,连个剪枝都不用都可以过. 题目描述[luogu传送门] 现有一块大奶酪,它的高度为 h,它的长度 ...
- 20155318 《Java程序设计》实验四 (Android程序设计)实验报告
20155318 <Java程序设计>实验四 (Android程序设计)实验报告 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android.组 ...
- 20145209刘一阳《网络对抗》Exp8 Web基础
20145209刘一阳<网络对抗>Exp8 Web基础 基础问题回答 1.什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等 ...
- 20145226夏艺华 《Java程序设计》实验报告四
实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Andro ...
- [BZOJ1185][HNOI2007]最小矩形覆盖-[凸包+旋转卡壳]
Description 传送门 Solution 感性理解一下,最小矩形一定是由一条边和凸包上的边重合的. 然后它就是模板题了..然而真的好难调,小于大于动不动就打错. Code #include&l ...
- 【LOJ10121】与众不同
[LOJ10121]与众不同 题面 LOJ 题解 这题是_\(tham\)给\(ztl\)他们做的,然而这道题™居然还想了蛮久... 首先可以尺取出一个位置\(i\)上一个合法的最远位置\(pre_i ...
- PHP 0817PHP 0817 (PHP, Exploit) writeup
作为一只ctf小白,这个题看到之后真是丝毫没有思路.虽然能基本理解php,但还是没能顺利答出,最后直接进行了搜索. 虽然做技术,“固执”是优点.但是出于对自身自身情况的了解,我觉得现阶段看题解还是很有 ...
- Yii2 使用 faker 生成假数据
测试过程中有时候需要生成大量的假数据,faker 是一个生成假数据的类库,可以生成姓名,电话,IP地址,密码,ISBN等等你能想到的或者你想不到的各种类型的假数据. Yii2.0已经集成该类库,不用再 ...
- [Cocos2d-html5]关于压缩
使用的是2.2版本,压缩时要注意文件顺序,main.js文件最好排在最后一个,避免错误.
- Maven学习(十三)-----Maven 构建生命周期
Maven 构建生命周期 构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列. 这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准 ...