原理就是利用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. Jquery+artTemplate+layPage 封装datagrid

    导言 在日常开发中经常会用到列表,相信用过easyui,Ext等很多,的确很强大,但想修改确实也不容易,我也用了几年的easyui,有时间时会想一下,自已随然没有前端的精湛技术,但可以在有这些技术的开 ...

  2. Mysql数据备份与恢复

    REM INIT→既に指定したファイルが有った場合, 上書きする REM NORECOVERY→接続先データベースへの既存の接続を閉じる REM REPLACE→既存のデータベースを上書きする set ...

  3. C#3.0新特性之扩展方法介绍

    C#3.0扩展方法是给现有类型添加一个方法.现在类型即可是基本数据类型(如int,String等),也可以是自己定义的类.以下是引用片段: //Demo--1 //扩展基本类型 namespace T ...

  4. java-cef系列视频第二集:搭建开发环境

    上一集我们介绍了如何从官方代码编译java-cef. 本视频介绍了如何使用eclipse搭建java-cef二次开发环境. 下一集我们将给java-cef添加flash支持. 本作品采用知识共享署名- ...

  5. Cubieboard2裸机开发之(一)点亮板载LED

    前言 CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所 ...

  6. PHP vs Python

    最近在搞微信公众号方面的开发,发现很多开发微信公众号都使用PHP来开发,由于我之前开发Web端喜欢使用Python,所以从Quora网站找出一篇Which-is-better-PHP-or-Pytho ...

  7. NSURLSession与AFNetworking3.0

    下面是用GET方式请求一个页面数据的示例: AFNetworking 2.x NSString *siteUrl = @"http://webinar.ofweek.com/readDemo ...

  8. python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte

    今天折腾了一天,安装pyspider,由于依赖包众多,而且搜索到所有信息多是在linux平台和mac平台下的安装教程.可怜我试了n多版本,一直不成功. 最后发现有人说python的版本,不能低于2.7 ...

  9. 金蝶EAS常用表

    select * from T_SCM_BillType where FName_L2 like '%委外%'   --单据类型表,查业务单据对应的表  102--销售出库单  330--应收单 se ...

  10. Inkpad绘图原理浅析

    本文新版本已转移到开源中国,欢迎前往指导. Inkpad是一款非常优秀的iPad矢量绘图软件,保管你一看见就忘不了.我的感觉是“一览众山小”.“相见甚晚”,以至于我写的TouchVG就是“小巫见大巫” ...