Bootstrap 可视化布局--拖拽后弹窗进行编辑

最近后台想一个需求,使用可视化布局-中文 | en中拖拽表格后,弹窗进行编辑,保存下载后在后台生成pdf格式。

奈何各种问题不断,使用 jquery-ui中的 draggable各种坑不断,哎,一言难尽,最怕这种不是自己写的,只能不断踩坑,踩着踩着就好了

最终目的效果图

原始效果是没有之后的弹窗,需要点击才会有

思路

  • 思路1: 将点击的代码直接放到 拖拽结束时使用即可
  • 思路2: 找到被拖拽的对象,对其进行修改即可
  • 思路3: 找到点击弹窗的按钮(需要对应到指定的对象)

难点

如何找到指定的元素,每次拖拽添加都会克隆元素,若是通过元素查找便会是一个数组,很多个,这个完全不现实,因而考虑给每一个添加指定的标识。

若是考虑找到被克隆对象,目前我尝试多种方式,直接是找不到,一脸懵逼我,我也很无奈,直接两者间没有联系,尝试过event来找,依旧没有任何效果

代码看问题

html

<div class="preview">表格</div>
<div class="view">
<table class="table" contenteditable="true">
<thead>
<tr>
<th>编号</th>
<th>产品</th>
<th>交付时间</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>TB - Monthly</td>
<td>01/04/2012</td>
<td>Default</td>
</tr>
<tr class="success">
<td>1</td>
<td>TB - Monthly</td>
<td>01/04/2012</td>
<td>Approved</td>
</tr>
<tr class="error">
<td>2</td>
<td>TB - Monthly</td>
<td>02/04/2012</td>
<td>Declined</td>
</tr>
<tr class="warning">
<td>3</td>
<td>TB - Monthly</td>
<td>03/04/2012</td>
<td>Pending</td>
</tr>
<tr class="info">
<td>4</td>
<td>TB - Monthly</td>
<td>04/04/2012</td>
<td>Call in to confirm</td>
</tr>
</tbody>
</table>
</div>
</div>

js

// 拖拽的代码
$(".sidebar-nav .box").draggable({
connectToSortable: ".column",
helper: "clone",
handle: ".drag",
start: function(e,t) {
if (!startdrag) stopsave++;
startdrag = 1;
},
drag: function(e, t) {
t.helper.width(400)
},
stop: function(e) {
handleJsIds(e);
if(stopsave>0) stopsave--;
startdrag = 0;
}
});

效果图

各种思路尝试的结果,就不一一列举了,都是泪

  • 使用 jquery-uidraggable的各类属性,始终无效果,modal:ture无法弹窗,结合dialog却无法找到指定被修改对象
  • 最终症结所在,便是如何找到你刚拖拽的对象身上,这样一切都好解决

开启找到指定拖拽的对象之旅

思路是有,一直不知道如何有效实现,当看到此处代码时,一切就豁然开朗

// 此处是在拖拽 stop时被调用的
function handleJsIds(e) {
handleModalIds();
handleAccordionIds();
handleCarouselIds();
handleTabsIds();
handleDialog()
}
// 这里看到给每个添加属性,就知道还是要走这条路了
function handleCarouselIds() {
var e = $(".demo #myCarousel");
var t = randomNumber();
var n = "carousel-" + t;
e.attr("id", n);
e.find(".carousel-indicators li").each(function(e, t) {
$(t).attr("data-target", "#" + n)
});
e.find(".left").attr("href", "#" + n);
e.find(".right").attr("href", "#" + n)
}

开始时,一直都在找弹出按钮,因为点击,会出现修改的modal层

重新定义一个函数hangleDialog

// 用来触发弹窗
function handleDialog(params) {
// 找到所有的按钮
var e = $('body.edit .demo [data-target=#editorModal]')
const n = randomNumber()
e.each(function(i, t) {
// 判断是否添加了flag属性
if (!$(t).attr('flag')) {
$(t).attr('flag', n)
// 触发按钮弹窗
$(t).trigger('click')
}
})
}

总结

目前而言,这个是改动最小的,基本没有对源代码进行修改,只是单纯添加一段而已,个人十分喜欢,其他方式改动幅度过大,效果既没出来,还不敢保证是否会影响其他效果

补充

  • 源代码 ,虽说原作者不允许公开,但还是让我找到了,仅供技术探讨吧layoutit
  • 一个插件 通过html可以找到对应绑定的事件 visual event

Bootstrap 可视化布局--拖拽后弹窗进行编辑的更多相关文章

  1. jqueryui sortable拖拽后保存位置

    jqueryUI sortable 可以用来进行页面拖拽布局,然而有一个小问题就是拖拽后如何保存状态. 工作中遇到了这个情况,遍把这个问题记了下来,具体思路是: 利用拖拽stop后利用   var a ...

  2. OpenLayer3调用天地图,拖拽后,地图消失的问题[已解决]

    拖拽后,地图直接消失了,而且右上角的坐标变成了NaN,NaN 后来经过测试发现,原来是自己封装有问题,坐标点一定要用parseFloat()转换下,但不清楚为什么页面刚开始加载的时候没有问题,总之能解 ...

  3. twaver拓扑图拖拽后保存json数据

    功能描述:拓扑图.对节点进行拖拽,序列化获取拓扑图信息,保存到本地localStorage,刷新页面,执行反序列化,从本地获取之前保存的数据,展现之前拖拽后的拓扑 拓展:此处存储用的是web本地存储l ...

  4. iOS-UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影

    iOS UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影 隐藏滚动条和上下滚动时出边界的后面的黑色的背景 webView.backgroundColor=[UIColor clearColor ...

  5. 基于svg.js实现对图形的拖拽、选择和编辑操作

    本文主要记录如何使用 svg.js 实现对图形的拖拽,选择,图像渲染及各类形状的绘制操作. 1.关于SVG SVG 是可缩放的矢量图形,使用XML格式定义图像,可以生成对应的DOM节点,便于对单个图形 ...

  6. 基于jquery-ui及bootstrap的可拖拽模态框

    可直接使用代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  7. 对于bootstrap可视化布局设计可以参考2017.6.2

    http://www.layoutit.cn/v3/index.html  可视化布局链接,拖好控件自动生成代码非常方便 http://www.jq22.com/jquery-info14044  这 ...

  8. C# 图片缩放,拖拽后保存成图片的功能

    窗体界面部分如下: 鼠标的缩放功能需要手动在 OpertaionImg.Designer.cs 文件里面添加一句代码,具体代码如下: //picturePhoto显示图片的控件 this.pictur ...

  9. [前端]分享一个Bootstrap可视化布局的网站

    如果你像我一样:是个前端渣,能看懂css和html,略懂Bootstarp,懒! 当你每次都想独立完成一个web页面而不知道从哪里下手的时候,那么下面的这个网站,就是你所以需要的! http://ww ...

随机推荐

  1. 转:WebClient类(温习一下)

    WebClient类提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法. 其实就相当于创建一个请求客户端.可以获取网页和各种各样的信息,包括交互. 通过MSDN来看看WebC ...

  2. iClap是什么,能解决什么问题?

    移动互联网时代,APP体验度.用户粘性和活跃度关乎企业命脉,但是市面上使用的办公工具却不足以解决企业存在的问题,iClap应运而生,颠覆互联网企业的传统协作方式,改变了种子用户与企业的互动方式,为企业 ...

  3. 【转】Google的2012论文

    转自:http://www.sigvc.org/bbs/thread-1152-1-1.html Google的论文一直是业界的风向标,尤其在机器学习.分布式系统.网络等方面很多创新性的成果都是由他们 ...

  4. Jmeter数据库mysql测试说明

    主要分3个步骤,详细操作步骤如下: 一.环境准备 1.下载mysql驱动,下载地址:https://dev.mysql.com/downloads/connector/j/,Select Operat ...

  5. 什么是HotSpot VM

    学习并转载自https://www.cnblogs.com/charlesblc/p/5993804.html 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJD ...

  6. spark程序设计

    Spark程序设计—创建RDD:从Scala集合构造成RDD parallelize(a, 3) makeRDD(a, 3) 他俩使用方式一样,只不过名字不一样 Spark程序设计—创建RDD:本地文 ...

  7. springbcloud5----高可用

    package com.itmuch.cloud; import org.springframework.boot.SpringApplication; import org.springframew ...

  8. 对称加密与非对称加密,以及RSA的原理

    一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...

  9. rz时提示command not found

    -bash: rz: command not found rz命令没找到? 执行sz,同样也没找到.     安装lrzsz: # yum -y install lrzsz   现在就可以正常使用rz ...

  10. path.resolve()和path.join()

    resolve 作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径. 语法:path.resolve([...paths]) 说明: ...paths <strin ...