热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bootstrap如何做一个doublebox双向选择器

------------恢复内容开始------------1、首先什么是双向选择器,上图   类似这样的一个可以穿梭相互选择的选择器,实现方法:html+jquery+djang

------------恢复内容开始------------

1、首先什么是双向选择器,上图

 

 

 

类似这样的一个可以穿梭相互选择的选择器,实现方法:html+jquery+django

django-models.py

# 用户组使用了Django自带的group表
from django.contrib.auth.models import User,Group
# Group VS View_Cate 多对多关系
class View_Cate(models.Model):
name = models.CharField(unique=True,default=None,max_length=50,verbose_name='视图名称')
user_group = models.ManyToManyField(Group,blank=True,null=True)
class Meta:
db_table = 'opsmanage_view_cate'
verbose_name_plural = '视图表'
default_permissiOns= ()

html












ID 视图名称 操作

jquery

var language = {
"sProcessing" : "处理中...",
"sLengthMenu" : "显示 _MENU_ 项结果",
"sZeroRecords" : "没有匹配结果",
"sInfo" : "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty" : "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
"sInfoPostFix" : "",
"sSearch" : "搜索: ",
"sUrl" : "",
"sEmptyTable" : "表中数据为空",
"sLoadingRecords" : "载入中...",
"sInfoThousands" : ",",
"oPaginate" : {
"sFirst" : "首页",
"sPrevious" : "上页",
"sNext" : "下页",
"sLast" : "末页"
},
"oAria" : {
"sSortAscending" : ": 以升序排列此列",
"sSortDescending" : ": 以降序排列此列"
}
}
function InitDataTable(tableId,url,buttons,columns,columnDefs){
var data = requests('get',url)
oOverviewTable =$('#'+tableId).dataTable(
{
"dom": "Bfrtip",
"buttons":buttons,
"bScrollCollapse": false,
"bRetrieve": true,
"destroy": true,
"data": data,
"columns": columns,
"columnDefs" :columnDefs,
"language" : language,
"order": [[ 0, "ase" ]],
"autoWidth": false
});
}

$(document).ready(function()
{
makeAppsManageTableList()
})
function makeAppsManageTableList(){
var columns = [
{"data": "id"},
{"data": "name"}
]
var columnDefs = [
{
targets: [2],
render: function(data, type, row, meta) {
return '

' +
'' +
'' +
'' +
'
';
},
"className": "text-center",
},
]
var buttOns= [{
text: '',
className: "btn-xs",
action: function ( e, dt, node, config ) {
addViews()
}
}]
InitDataTable('appListTable','/api/queryView/',buttons,columns,columnDefs);
}

 

 

 

 

 

jquery

$("#viewGroupSubmit").on('click', function() {
var vIds = $(this).val();
var vServer = $('[name="user-group-doublebox"]').val()
if (vServer){
$.ajax({
type: "POST",
url:"/api/cate/info/"+vIds+'/',
data:{
"type":"modf_view_group",
"id": vIds,
"groups":vServer
},
error: function(response) {
new PNotify({
title: 'Ops Failed!',
text: response.responseText,
type: 'error',
styling: 'bootstrap3'
});
},
success: function(response) {
if (response["code"] == 200){
new PNotify({
title: 'Success!',
text: '修改成功',
type: 'success',
styling: 'bootstrap3'
});
}else{
new PNotify({
title: 'Ops Failed!',
text: response["msg"],
type: 'error',
styling: 'bootstrap3'
});
}
}
});
}else{
$.confirm({
title: '警告',
typeAnimated: true,
content: "没有选择任何用户组~",
type: 'red'
});
}
});

 html

jquery

function GetViewOrGroups(url,uid){
var aList = []
var sList = []
var url = url + uid +'/?type=get_user_group'
respOnse= requests('get',url)
if(response["code"]=="200"){
for (var i=0; i if (response["data"][i]["apps_name"]){
var name = response["data"][i]["apps_name"]+ ' - ' + response["data"][i]["name"]
}else{
var name = response["data"][i]["name"]
}
if(response["data"][i]["status"]==1){
sList.push({"id":response["data"][i]["id"],"name":name})
}
else{
aList.push({"id":response["data"][i]["id"],"name":name})
}
}
}
return {"group":sList,"all":aList}
}

django-views.py

if request.GET.get('type') == 'get_user_group':
# todo 视图与角色组关联关系
cates = App_Cate.objects.filter(id=id).first()
selected_group = [group for group in cates.user_group.all()]
groupList = []
for group in Group.objects.all():
groupDict = {}
groupDict['id'] = group.id
groupDict['name'] = group.name
if group in selected_group:
groupDict['status'] = 1
else:
groupDict['status'] = 0
groupList.append(groupDict)
return JsonResponse({'code':200,'data':groupList})

以上即可拿到数据渲染双向选择器,效果如图一

jquery

$("#viewGroupSubmit").on('click', function() {
var vIds = $(this).val();
var vServer = $('[name="user-group-doublebox"]').val()
if (vServer){
$.ajax({
type: "POST",
url:"/api/cate/info/"+vIds+'/',
data:{
"type":"modf_view_group",
"id": vIds,
"groups":vServer
},
error: function(response) {
new PNotify({
title: 'Ops Failed!',
text: response.responseText,
type: 'error',
styling: 'bootstrap3'
});
},
success: function(response) {
if (response["code"] == 200){
new PNotify({
title: 'Success!',
text: '修改成功',
type: 'success',
styling: 'bootstrap3'
});
}else{
new PNotify({
title: 'Ops Failed!',
text: response["msg"],
type: 'error',
styling: 'bootstrap3'
});
}
}
});
}else{
$.confirm({
title: '警告',
typeAnimated: true,
content: "没有选择任何用户组~",
type: 'red'
});
}
});

django-views.py

if data.get('type') == 'modf_view_group':
cate = View_Cate.objects.filter(id=id).first()
groupList = [int(i) for i in request.POST.getlist('groups[]')]
addGroupsList = list(set(groupList).difference(set(cate.user_group.all())))
delGroupsList = list(set(cate.user_group.all()).difference(set(groupList)))
for groupObj in delGroupsList:
cate.user_group.remove(groupObj)
for groupId in addGroupsList:
appObj = Group.objects.filter(id=groupId).first()
cate.user_group.add(grouppObj)
return JsonResponse({'code': 200, 'msg': '修改成功'})

大功告成

------------恢复内容结束------------



推荐阅读
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 解决文件名过长下载失败问题的jQuery方案
    本文介绍了使用jQuery解决文件名过长导致下载失败的问题。原方案中存在文件名部分丢失的问题,通过动态生成隐藏域表单并提交的方式来解决。详细的解决方案和代码示例在文章中给出。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • jQuery如何判断一个元素是否被点击?
    本文介绍了使用jQuery判断一个元素是否被点击的方法,并通过示例进行了具体说明。注意要指定父级,否则会执行多次。 ... [详细]
author-avatar
丘圆圆611
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有