js 表单布局设计器



<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>表单布局设计器 !</title>
<link type="text/css" href="css/smoothness/jquery-ui-1.8.14.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.tablednd.js"></script>
<script type="text/javascript" src="js/dragform.js"></script>


<style>

#formLable { float: left; width: 100px; min-height: 12em; margin-top:10px;margin-left:20px;}
* html #formLable { height: 12em; } /* IE6 */
.formLable.custom-state-active { background: #eee; }
.formLable li { float: left; width: 96px; padding: 0.4em; margin: 0 0.4em 0.4em 0; text-align: center; }
.formLable li h5 { margin: 0 0 0.4em; cursor: move; }

.tdbg {background:#CCFFFF}
.notnull{color:#FF0000;}
</style>



</head>
<body>
<center><h2>表单布局设计器</h2></center>
<hr/> <br/>

<div id="demo">
<table width="99%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td width="15%" align="center" style="border:1px solid #666666" height="35"> 标签</td>
<td style="border:1px solid #666666">
<input type="button" onclick="insertCol();" value="插入行" />
<input type="button" onclick="deleteCol();" value="删除行" />
<input type="button" onclick="insertCell();" value="插入列" />
<input type="button" onclick="deleteCell();" value="删除列" />
<input type="button" onclick="combinCol();" value="合并" />
<!--<input type="button" onclick="" value="拆分" disabled />-->
<input type="button" onclick="alignOpr('left');" value="左对齐" />
<input type="button" onclick="alignOpr('center');" value="左右对齐" />
<input type="button" onclick="alignOpr('right');" value="右对齐" />
<input type="button" onclick="valignOpr('top');" value="上对齐" />
<input type="button" onclick="valignOpr('middle');" value="上下居中" />
<input type="button" onclick="valignOpr('bottom');" value="下对齐" />
<input type="button" onclick="nullOpr(1);" value="设为必填" />
<input type="button" onclick="nullOpr(2)" value="取消必填设置" />


</td>
</tr>
<tr>

<td rowspan=2 style="border:1px solid #666666" valign="top" >

<ul id="formLable" class="formLable ui-helper-reset ui-helper-clearfix">
<li class="ui-widget-content ui-corner-tr">
<h5 class="ui-widget-header">姓名 </h5>

</li>
<li class="ui-widget-content ui-corner-tr">
<h5 class="ui-widget-header">年龄 </h5>

</li>
<li class="ui-widget-content ui-corner-tr">
<h5 class="ui-widget-header">家庭住址 </h5>
</li>
<li class="ui-widget-content ui-corner-tr">
<h5 class="ui-widget-header">性别 </h5>
</li>
</ul>


</td>

<td height="200" style="border:1px solid #666666" valign="top">

<center>表格设计</center>

<table width="99%" border="1" align="center" cellpadding="0" cellspacing="0" id="formTable" style="table-layout:fixed;font-size:12px;">
<tr>
<td height="40"> </td>
<td height="40"> </td>
<td height="40"> </td>
<td height="40"> </td>
</tr>
<tr>
<td height="40"> </td>
<td height="40"> </td>
<td height="40"> </td>
<td height="40"> </td>
</tr>

</table>
</td>
</tr>

<tr>

<td style="border:1px solid #666666" height="35">
<input type="button" onclick="" value="查看页面布局" disabled /> 
<span style="font-size:12px;color:#666666">(操作提示:单元行可以拖动排序!)</span>
</td>


</tr>



</table>
</div>
</body>
</html>




//拖动元素设置
function formTdClickInit(){
//处理单击选中事件
$("#formTable td").click(function(){
$("#formTable td").droppable("destroy"); //注意不要为disabled,ie不正常
$("#formTable td").removeClass("tdbg");
$(this).addClass("tdbg");
$(this).droppable("enable");
$(this).droppable({
accept: "#formLable > li",
activeClass: "ui-state-highlight",
drop: function( event, ui ) {
var drag = ui.draggable;
if($(".tdbg > :input").length == 1 || $(this).next().length == 0 || $.trim($(this).text())!="" ){
alert("不允许添加标签!");
return;
}
drag[0].parentNode.removeChild(drag[0]); //移除左侧元素
var cle = "<a href='#' title='清除' class='ui-icon ui-icon-refresh' onclick='recycle(this)'></a>";
$(this).html(cle+drag.find("h5").html());
$(this).next().html(" <input type='text' name='' disabled style='margin-left:6px;'/>");
}
});
});
}

// 接收元素设置
function lableDragInit(){

$( "li", $("#formLable") ).draggable({
revert: "invalid",
containment: $( "#demo" ).length ? "#demo" : "document", //限制在demo块里
helper: "clone", //复制拖动
cursor: "move"
});

}

$(function(){

lableDragInit()

formTdClickInit();

$("#formTable").tableDnD(); //插入行后,要重新设置

//在这里可以设置双击单元格的事件
//$("#formTable td").dblclick(function(){
//showModalDialog("modifyElmAttr.html",this);
//});

});

//合并单元格
function combinCol(){

if($(".tdbg").length == 0){
alert("请选择要合并的单元格!");
return;
}

if($(".tdbg").next().length == 0 || $(".tdbg").next().find(":input").length ==1){
alert("当前单元格不能合并!");
return;
}

var colnum = Number($(".tdbg").attr("colspan")) + Number($(".tdbg").next().attr("colspan"));

//合并后一个单元格标签的恢复
var notnull = $(".tdbg").next().find(".notnull");//除去必填
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}

if($(".tdbg").next().html().toLowerCase().indexOf("</a>") > -1){
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"+$(".tdbg").next().text()+"</h5></li>";
$("#formLable").append(innerHtml);
$(".tdbg").next().next().html(" ");//注意input 要清空
}
$(".tdbg").attr("colspan",colnum).next().remove();
lableDragInit();
}

//插入行
function insertCol(){

if($(".tdbg").length == 0){
alert("请选择插入行的位置!");
return;
}

//首先获取colspan 总数确定td的个数
var max = 0;
$("#formTable tr").eq(0).find("td").each(function(){

max += Number($(this).attr("colspan"));

});

var tdStr ="";
for(var i=0;i<max;i++){
tdStr += "<td height=\"40\"> </td>";
}
$(".tdbg").parent().after("<tr>"+tdStr+"</tr>");
formTdClickInit();
$("#formTable").tableDnD();
}


//删除行
function deleteCol(){
if($(".tdbg").length == 0){
alert("请选择要删除的行!");
return;
}
//只有一行的时候,不允许删除
if($("#formTable tr").length == 1){
alert("不允许删除行!");
return;
}
//恢复行中的标签
$(".tdbg").parent().find("td").each(function(){
var notnull = $(this).find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}
if($(this).html().toLowerCase().indexOf("</a>") > -1){
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"+$(this).text()+"</h5></li>";
$("#formLable").append(innerHtml);
}
});
$(".tdbg")[0].parentNode.parentNode.removeChild($(".tdbg")[0].parentNode);
lableDragInit();
}

//插入列
function insertCell(){
if($(".tdbg").length == 0){
alert("请选择插入列的位置!");
return;
}


//计算选择列colspan 之前的综合
var colNum = Number($(".tdbg").attr("colspan"));
$(".tdbg").prevAll().each(function(){
colNum += Number($(this).attr("colspan"));
});

var noopr =0;

$("#formTable tr").each(function(){
if(noopr ==1)return false;
var totalCol=0;
$(this).find("td").each(function(){
totalCol += Number($(this).attr("colspan"));
if(totalCol >= colNum)
{
if($(this).next().find(":input").length ==1)noopr=1;
return false;
}

});

});

if( noopr ==1){
alert("当前位置不允许插入列,请重新选择!");
return;
}
else
{
$("#formTable tr").each(function(){
var totalCol=0;
$(this).find("td").each(function(){
totalCol += Number($(this).attr("colspan"));
if(totalCol >= colNum)
{
$(this).after("<td height=\"40\"> </td>");
return false;
}

});
});
formTdClickInit();
}
}

//删除列
function deleteCell(){
if($(".tdbg").length == 0){
alert("请选择删除列位置!");
return;
}

//如果选中该列的没有其他同辈元素,不允许删除
if($(".tdbg").parent().find("td").length == 1){
alert("不允许删除列!");
return;
}

//确定删除列的位置,如果为合并的单元格,删除多列
var colsNum = $("#formTable tr").index($(".tdbg").parent()); //所在行
var startNum = 1;
$(".tdbg").prevAll().each(function(){
startNum += Number($(this).attr("colspan"));
});

var endNum = startNum + Number($(".tdbg").attr("colspan")) -1;

$("#formTable tr").each(function(i){
if( i == colsNum){ //选中行对应列的删除

if($(".tdbg").html().toLowerCase().indexOf("</a>") > -1){
var notnull = $(".tdbg").find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}

var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$(".tdbg").text()+"</h5></li>";
$("#formLable").append(innerHtml);
$(".tdbg").next().html(" ");
}
if($(".tdbg > :input").length ==1 ){
var notnull = $(".tdbg").prev().find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$(".tdbg").prev().text()+"</h5></li>";
$("#formLable").append(innerHtml);
$(".tdbg").prev().html(" ");
}
$(".tdbg")[0].parentNode.removeChild($(".tdbg")[0]);
}
else
{

if(startNum < endNum ){ //当前单元格为非选中合并格
//找出 colspan 在 startNum~endNum 对应的单元格
//由于有remove操作,删除之后重新从startNum开始
for(var k=startNum;k<=endNum;k++){
var totalCol=0;
$(this).find("td").each(function(j){

totalCol += Number($(this).attr("colspan"));

if(totalCol >= startNum){

var col = Number($(this).attr("colspan"));
if(col>1){
$(this).attr("colspan",col-1);
}
else
{

if($(this).html().toLowerCase().indexOf("</a>") > -1){
var notnull = $(this).find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$(this).text()+"</h5></li>";
$("#formLable").append(innerHtml);
$(this).next().html(" ");
}

if($(this).find(":input").length ==1 ){
var notnull = $(this).prev().find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$(this).prev().text()+"</h5></li>";
$("#formLable").append(innerHtml);
$(this).prev().html(" ");

}
$(this)[0].parentNode.removeChild($(this)[0]);
}
return false;
}
});
}
}
else //非合并选中单元格 colspan =1
{
//找出所对应的单元格
var totalCol=0,epItem,$epItem;
$(this).find("td").each(function(l){
totalCol += Number($(this).attr("colspan"));
if(totalCol >= startNum){
epItem =l;
return false;
}
});
$epItem = $(this).find("td").eq(epItem);
var col = Number($epItem.attr("colspan"));
if(col>1)
{
$epItem.attr("colspan",col-1);
}
else
{

if($epItem.html().toLowerCase().indexOf("</a>") > -1){
var notnull = $epItem.find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}

var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$epItem.text()+"</h5></li>";
$("#formLable").append(innerHtml);
$epItem.next().html(" ");

}
if($epItem.find(":input").length ==1 ){
var notnull = $epItem.prev().find(".notnull");
if(notnull.length == 1)
{
notnull[0].parentNode.removeChild(notnull[0]);
}
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"
+$epItem.prev().text()+"</h5></li>";
$("#formLable").append(innerHtml);
$epItem.prev().html(" ");
}
$epItem[0].parentNode.removeChild($epItem[0]);
}
}
}
});
lableDragInit();
}


//恢复单元格标签
function recycle(obj){
$item = $(obj).parent();
var notnull = $item.find(".notnull");
if(notnull.length == 1){
notnull[0].parentNode.removeChild(notnull[0]);
}
var innerHtml ="<li class=\"ui-widget-content ui-corner-tr\"><h5 class=\"ui-widget-header\">"+$item.text()+"</h5></li>";
$("#formLable").append(innerHtml);
$item.html(" ");
$item.next().html(" ");
lableDragInit();
}


//水平对齐操作
function alignOpr(val){

if($(".tdbg").length == 0){
alert("请选择要操作的单元格!");
return;
}
$(".tdbg").attr("align",val);
}

//垂直对其操作
function valignOpr(val){

if($(".tdbg").length == 0){
alert("请选择要操作的单元格!");
return;
}
$(".tdbg").attr("valign",val);

}

//必填操作
function nullOpr(val){

if($(".tdbg").length == 0){
alert("请选择要操作的单元格!");
return;
}
if(val == 1){
if($.trim($(".tdbg").text())==""){
alert("该单元格为空,不能设为必填!");
return;
}
if($(".tdbg .notnull").length == 1){
alert("无需重复设置必填!");
return;
}
$(".tdbg").append("<span class=notnull>*</span>");
}else{
if($(".tdbg .notnull").length == 1)
$(".tdbg .notnull")[0].parentNode.removeChild($(".tdbg .notnull")[0]);

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值