原理就是利用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实现表格拖动排序的更多相关文章

  1. JQuery对表格进行排序

    添加相关jar <script type="text/javascript" src="jquery-1.1.3.pack.js"></scr ...

  2. jquery 鼠标拖动排序Li或Table

    1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Ta ...

  3. JQuery 表格拖动调整列宽效果

    类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...

  4. jQuery html表格排序插件:tablesorter

    ablesort是一款很好用的jQuery表格排序插件. 支持多种数据类型排序,会自动识别表格内容数据类型,使用也非常方便. 使用jQuery tablesort实现html表格方法: 1. 下载jQ ...

  5. jQuery可拖拽排序列表jquery-sortable-lists

    jquery-sortable-lists可以通过鼠标进行拖动排列树型菜单,可以定义某个列表元素是否拖动,拖动后回调,点击可以折叠树型结点,可以用来在后台模仿wordpress后台拖动菜单,实现多级菜 ...

  6. 锋利的jQuery-7--query ui效果库--拖动排序插件sortable

    一个简单的拖动排序效果,具体请参看jQuery ui官网demo. jquery ui :http://jqueryui.com/ sortable例子:http://jqueryui.com/sor ...

  7. jQuery实现表格行上移下移和置顶

    jQuery实现表格行上移下移和置顶 我们在操作列表数据的时候,需要将数据行排列顺序进行调整,如上移和下移行,将行数据置顶等,这些操作都可以在前端通过点击按钮来完成,并且伴随着简单的动态效果,轻松实现 ...

  8. IOS UITableView拖动排序功能

    UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,排序等功能,下面就来讲解一下如何实现排序. 排序是当表格进入编辑状态后,在单元格的右侧会出现一个按钮,点击按钮,就可以拖动单 ...

  9. jQuery 选择表格(table)里的行和列及改变简单样式

    本文只是介绍如何用jQuery语句对表格中行和列进行选择以及一些简单样式改变,希望它可以对jQuery表格处理的深层学习提供一些帮助jQuery对表格(table)的处理提供了相当强大的功能,比如说对 ...

随机推荐

  1. 解决Electron加载带jquery的项目报错问题

    <!-- Insert this line above script imports --> <script>if (typeof module === 'object') { ...

  2. iOS 语言切换、本地化,国际化

    什么是本地化处理? 本地化处理就是我们的应用程序有可能发布到世界的很多国家去,因为每个国家应用的语言是不一样的,所以我们要把我们的应用程序的语言要进行本地化处理一下. 本地化处理需要处理那些文件? ( ...

  3. SAP顾问发展

    关于SAP顾问发展的话题也不仅仅是一次的谈起,但是我想对于自己的规划很多人是否有没有深刻的考虑过.这对于你我来说都非常的重要,那么作为我来说,我仅仅把自己的观点阐述以供大家思考,希望对大家能有所帮助. ...

  4. ASP.NET 如何发现问题的方法

    1.打开IntelliTrace,查看遇到的问题: 2.打开IE8以上,按F12,启动js调试,查看遇到的错误:

  5. POJ 1816 Wild Words

    Wild Words Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4412   Accepted: 1149 Descri ...

  6. golang 图片处理,剪切,base64数据转换,文件存储

    本文主要介绍: 1. 图片文件的读写. 2. 图片在go缓存中如何与base64互相转换 3. 图片裁剪 本文中,为了方便查看,去掉所有错误判断 base64 -> file ddd, _ := ...

  7. win7下IE主页无法修改,IE设置无法保存解决方案

    转自:http://www.myhack58.com/Article/48/65/2012/34411.htm 经测,有效! 现象如下: 1.开启后,首先总是指向http://go.microsoft ...

  8. symfony安装使用

    symfony是一个强大的具有DI特性的框架,目前比较流行的php开发框架Drupal,Laravel底层都是使用了symfony. 想了解symfony更多内容,传送门 安装symfony很简单,一 ...

  9. smartjs 0.2 OOP讲解 - Klass 类继承

    SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...

  10. jQuery 1.9 Ajax代码带注释

    /* -----------ajax模块开始 -----------*/ var // Document location ajaxLocParts, ajaxLocation, ajax_nonce ...