jQuery实现表格拖动排序
原理就是利用mousedown、mouseover、mouseup事件实现拖动,并用Ajax实现保存结果。
JS代码如下:
<!--题目调序功能-->
<script type="text/javascript">
var moveStart = false; //是否开始移动
var curTr; //待移动的tr
var tarTr; //目标tr _run(function () {
//鼠标按下
$("#tableDataList").find("tr").find("td:not(:last)").mousedown(function () {
moveStart = true;
curTr = $(this).parent();
curTr.find("td").addClass("highlightTd");
curTr.addClass("pointer");
}); //鼠标移入
$("#tableDataList").find("tr").mouseover(function () {
var ch = "input[type='checkbox']";
if (moveStart == true && curTr.find(ch).attr("subid") != $(this).find(ch).attr("subid")) {
if (curTr.offset().top > $(this).offset().top) { //上移
tarTr = $(this);
tarTr.focus();
tarTr.before(curTr);
}
else { //下移
tarTr = $(this);
tarTr.focus();
tarTr.after(curTr);
}
}
}); //鼠标移出
$("#tableDataList").find("tr").mouseup(function () {
if (moveStart == true) {
moveStart = false;
curTr.find("td").removeClass("highlightTd");
curTr.removeClass("pointer"); var subjectIds = ""; //存储ID集合
$("#tableDataList").find("input[type='checkbox'][id!='checkAll']").each(function () {
subjectIds += $(this).attr("subId") + ",";
});
if (subjectIds != "") {
//Ajax请求保存数据
$.ajax({
type: "POST",
url: "#{ChangeSubjectsSortUrl}",
data: "subjectIds=" + subjectIds.substr(0, subjectIds.length - 1), //传参
success: function (data) {
if (data == "ok") {
var i = 0;
$("#tableDataList").find("tr:not(:first)").each(function () {
i++;
$(this).find("td:eq(3)").html(i); //更新题目序号显示
});
}
}
});
}
}
});
});
</script>
HTML代码如下(说明:框架会自动把<!-- BEGIN list -->和<!-- END list -->之间的内容绑定为列表):
<div class="Activity_Select_Index_Con">
<b class="Activity_Select_Index_Title">题目 <a href="#{viewAllLink}" title="预览所有题目"
class="frmBox">
<img src="~img/edit.gif" />预览问卷</a> <a href="#{addLink}" title="添加题目" class="frmLink"
loadto="divEdit" nolayout="999">
<img src="~img/add.gif" />添加</a> <a href="javascript:void(0);" onclick="batchDeleteClick()">
<img src="~img/delete.gif" />
删除</a></b>
<div class="SIMPO_Table" style="width: 100%">
<table id="tableDataList" border="0" cellspacing="0" cellpadding="0" style="-moz-user-select: none;"
onselectstart="javascript:return false;">
<tr>
<th width="36">
<input type="checkbox" name="checkbox" id="checkAll" onclick="checkAllClick(this)" />
</th>
<th width="131">
<b>题目名称</b>
</th>
<th width="131">
<b>题目类型</b>
</th>
<th width="114">
<b>题目顺序</b>
</th>
<th width="114">
<b>题目分值</b>
</th>
<th width="100" align="center">
<b>操作</b>
</th>
</tr>
<!-- BEGIN list -->
<tr>
<td align="center" valign="middle">
<input type="checkbox" name="checkbox" id="checkbox" subid="#{edu_QnSubject.Id}" />
</td>
<td align="center" valign="middle">
<a href="#{PreviewItemLink}" class="SIMPO_Table_Name frmBox">#{edu_QnSubject.Title}</a>
</td>
<td align="center" valign="middle">
#{edu_QnSubject.TypeId}
</td>
<td align="center" valign="middle">
#{edu_QnSubject.Sort}
</td>
<td align="center" valign="middle">
#{edu_QnSubject.Score}
</td>
<td align="center" valign="middle">
<a href="#{edu_QnSubject.EditLink}" title="修改题目" class="frmLink" loadto="divEdit"
nolayout="999">
<img src="~img/edit.gif" />修改</a> <a href="javascript:void(0)" onclick="delSubject(this)">
<img src="~img/delete.gif" />删除</a>
<form name="frmDelete" method="post" action="#{edu_QnSubject.DeleteLink}">
<input type="hidden" name="templateId" value="#{templateId}" />
</form>
</td>
</tr>
<!-- END list -->
</table>
</div>
</div>
Controller代码如下:
/// <summary>
/// 调整题目顺序
/// </summary>
public void ChangeSubjectsSort(int templateId)
{
string subjectIds = ctx.Post("subjectIds");
string[] subjectIdArray = subjectIds.Split(',');
for (int i = ; i < subjectIdArray.Length; i++)
{
Edu_QnSubject qnSubject = edu_QnSubjectService.findById<Edu_QnSubject>(int.Parse(subjectIdArray[i]));
qnSubject.Sort = i + ;
Result result = edu_QnSubjectService.update(qnSubject); //保存
}
echoText("ok");
}
效果图(静态图片看不到动态效果,这里示意一下):

jQuery实现表格拖动排序的更多相关文章
- JQuery对表格进行排序
添加相关jar <script type="text/javascript" src="jquery-1.1.3.pack.js"></scr ...
- jquery 鼠标拖动排序Li或Table
1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Ta ...
- JQuery 表格拖动调整列宽效果
类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...
- jQuery html表格排序插件:tablesorter
ablesort是一款很好用的jQuery表格排序插件. 支持多种数据类型排序,会自动识别表格内容数据类型,使用也非常方便. 使用jQuery tablesort实现html表格方法: 1. 下载jQ ...
- jQuery可拖拽排序列表jquery-sortable-lists
jquery-sortable-lists可以通过鼠标进行拖动排列树型菜单,可以定义某个列表元素是否拖动,拖动后回调,点击可以折叠树型结点,可以用来在后台模仿wordpress后台拖动菜单,实现多级菜 ...
- 锋利的jQuery-7--query ui效果库--拖动排序插件sortable
一个简单的拖动排序效果,具体请参看jQuery ui官网demo. jquery ui :http://jqueryui.com/ sortable例子:http://jqueryui.com/sor ...
- jQuery实现表格行上移下移和置顶
jQuery实现表格行上移下移和置顶 我们在操作列表数据的时候,需要将数据行排列顺序进行调整,如上移和下移行,将行数据置顶等,这些操作都可以在前端通过点击按钮来完成,并且伴随着简单的动态效果,轻松实现 ...
- IOS UITableView拖动排序功能
UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,排序等功能,下面就来讲解一下如何实现排序. 排序是当表格进入编辑状态后,在单元格的右侧会出现一个按钮,点击按钮,就可以拖动单 ...
- jQuery 选择表格(table)里的行和列及改变简单样式
本文只是介绍如何用jQuery语句对表格中行和列进行选择以及一些简单样式改变,希望它可以对jQuery表格处理的深层学习提供一些帮助jQuery对表格(table)的处理提供了相当强大的功能,比如说对 ...
随机推荐
- android 6.0权限判断 音频 拍照 相册
------------------------------------------打开音频权限------------------------------------------------ if ...
- gulp前端自动化构建工具使用
(1)新建项目目录gulp_web (2)项目目录下建目录src里面存放需要进行gulp处理的文件目录及文件 (3)gulpfile.js文件内容为声明需要打包应用的gulp组件及打包文件路径和打包任 ...
- php连接oracle数据库的方法
1.在php.ini中打开extension=php_oci8扩展,重启服务. 2.将php/ext目录下的php_oci8.dll文件拷贝到system32目录下 3.安装 Oracle9i客户端精 ...
- 让Extjs EditorGridPanel 编辑时支持方向键
在用 extjs editorgridpanel 进行输入编辑的时候, 默认情况下只支持使用 tab 键可以实现焦点切换, 如果想让editorgridpanel 在编辑时通过方向键来实现焦点跳转切换 ...
- 第一篇HBuilder在这里!
本文作为一个引子,所有相关文章,都会在这里做一个索引,现在还空着.谢谢
- netty ByteBuf分析
1.Heap Buffer(堆缓冲区) 2.Direct Buffer(直接缓冲区) 3.Composite Buffer(复合缓冲区) 4.PooledByteBuf 池缓冲 readerInex ...
- angularjs + seajs构建Web Form前端(三) -- 兼容easyui
回顾 在上一章中使用了angular实现了ajax form和树形结构,经过以上两章对于angular的大致使用,对于angular也有了初步的认识,接下来的内容只会对angular的一些用法做简单的 ...
- sudo: /etc/sudoers is mode 0777, should be 0440终极解决之道
不得不说,有时候手贱的把/etc/sudoers文件权限改了,是一件很蛋疼的事.因为此时你会发现无论做什么都会弹出一条讨厌的提示,说没有权限执行等等... 网上有介绍登入root用户,或者去grub的 ...
- Js调用Java方法并互相传参
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
- Javascript倒计时组件new TimeSpan(hours, minutes, minutes)
function TimeSpan(h, m, s) { this.h = Number(h); this.m = Number(m); this.s = Number(s); } TimeSpan. ...