最近工作中由于需求使用到了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. Mac使用bootcamp安装win系统花屏解决方法

    15年11'乞丐版air装win屏幕花屏,很郁闷,先后找了网上很多方法,最终总结出了一个比较折中的方法,不玩游戏不使用大型3D的可以参考. 1 花屏现象 2 解决方法 2.1 禁用驱动 2.2 使用M ...

  2. 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

    以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...

  3. 将python自动转换为.exe文件

    使用py2exe包进行转换.py2exe怎么装的可以网上另查.时间久了,记不太清了...... 这个程序可以把自己进行转换.但是没法运行....其实只要是需要修改自身的程序打包后都没法运行. # -* ...

  4. Linux入门第四天——shell基础

    一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...

  5. 20155325 加分作业 实现pwd

    要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 准备 思路 问题 1.如何获取当前目录的节点号 Linux ...

  6. 20155329实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 1实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 2. 初步掌握单元测试 ...

  7. 【BZOJ2589】[SPOJ10707]Count on a tree II

    [BZOJ2589][SPOJ10707]Count on a tree II 题面 bzoj 题解 这题如果不强制在线就是一个很\(sb\)的莫队了,但是它强制在线啊\(qaq\) 所以我们就用到了 ...

  8. CF 868 F. Yet Another Minimization Problem

    F. Yet Another Minimization Problem http://codeforces.com/contest/868/problem/F 题意: 给定一个长度为n的序列.你需要将 ...

  9. youtube视频下载和搬运的方法

    youtube全球最大的视频网站, 全世界每天有三分之一的网民在youtube上观看视频, 可是大部分人不知道, 在这些网民有一小部分人是依靠youtube生存的, 他们上传视频到youtube, y ...

  10. windows环境下apache-apollo服务器搭建及发布订阅测试

    查证了一些资料之后,发现 apache-apollo服务器使用的人还是挺多的,资料也比较齐全,所以直接选择 apache-apollo了,具体性能如何,先用起来再说吧: 1.下载 apache-apo ...