jquery实现点击GridView弹出可以拖拉的div,异步处理后台数据并返回结果显示在div里
前台页面代码:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Web._Default" %><html><head runat="server"> <title>弹出明细的div效果</title> <script src="jquery-1.3.2.js" type="text/javascript"></script> <style type="text/css"> table tr td { padding: 10px; } </style> <script type="text/javascript"> $(function() { $("#GridView1 tr td").click(function() { //获取点击的文本 var val = $(this).text(); var before_val = $(this).prev("td");//获取点击的单元格当前行的前一列 alert("前一列值:" + before_val.text());//获取前一列值 //**************************BEGIN**************************** var index = $(this).cellIndex; //点击单元格的当前列index var head_text = $("#GridView1 tr th:eq(" + index + ")").text(); //表头的列头内容 alert("所在列名:"+head_text);//这里就是表头内容,你点击那个单元格所在列的列表头(比如我这里的测试数据表头有:id、name、age) //**********************END********************************** //清空提示的div $("#tips").remove(); //获取div距离左边值 var left = $(this).offset().left + 10; //获取div距离顶端的值 var top = $(this).offset().top + 25; //动态创建div,并添加到body里 $("body").append(create_div(left, top)); //添加拖动事件 drag_div("tips"); //a标签的关闭事件 $("#tips a").click(function() { //$("#tips").fadeOut("slow");//有效果的关闭 $("#tips").remove(); //没效果的关闭 }); //异步请求 $.ajax({ type: "POST", url: "DataRespones.ashx", //将后台操作放在此文件里 data: "name=" + val,//这里是传递到后台的参数,格式为:key=value 有多个参数就用&隔开,如何前台获取到的数值你不能传到后台,那我无语了。 beforeSend: function() { $("#tips").append("<span id='s' style='font-size:12px;'>请稍后……</span>"); //增加超时后提示 }, success: function(msg) { $("span").remove(); $("#tips").append("<span>通过异步请求返回的值:</span><span style='color:red;'>" + msg + "</span>"); }, complete: function() { $("#tips #s").remove(); } }); }); }); //拖动div function drag_div(id) { var _move, _x, _y; $("#" + id).mousedown(function(e) { _move = true; _x = e.pageX - parseInt($("#" + id).css("left")); _y = e.pageY - parseInt($("#" + id).css("top")); $("#" + id).fadeTo(20, 0.25); //点击后开始拖动并透明显示 }); $(document).mousemove(function(e) { $("#" + id).css("cursor", "move"); if (_move) { var x = e.pageX - _x; //移动时根据鼠标位置计算控件左上角的绝对位置 var y = e.pageY - _y; $("#" + id).css({ top: y, left: x }); //控件新位置 } }).mouseup(function() { $("#" + id).css("cursor", "default"); _move = false; $("#" + id).fadeTo("fast", 1); //松开鼠标后停止移动并恢复成不透明 }); } //创建提示div function create_div(left, top) { var html = "<div id='tips' style='left:" + left + "px;top:" + top + "px;width:120px;height:100px;font-size:12px; padding:5px; border:1px solid #9ECD2A;position:absolute;background:#EDECE1;'><a href='javascript:void(0)'>关闭</a><br/><br/></div>"; return html; } </script></head><body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" Width="200" Height="50" HorizontalAlign="Center" RowStyle-HorizontalAlign="Center"> </asp:GridView> </div> </form></body></html>
后台ashx代码:
using System;using System.Collections;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using System.Threading;namespace Web{ public class DataRespones : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string result = string.Empty; string name=context.Request["name"];//从前台发送过来的值 result = SimulationDataBase(name);//将获取到的值再去查数据库,将查询的值以字符串形式返回给前台。 context.Response.Write(result); } public bool IsReusable { get { return false; } } /// <summary> /// 模拟操作数据库(根据你的实际情况将数据库操作放在此处操作,或以同样的方式自己创建一个方法) /// </summary> /// <param name="name">前台传过来的值</param> /// <returns>返回给前台用的字符串</returns> private string SimulationDataBase(string name) { string temp = string.Empty; switch (name) { case "张三": temp= "好好学习"; Thread.Sleep(2000);//人为手工模拟超时延迟。前台会出现"请稍后……"字样 break; case "王五": temp = "天天向上"; break; default: temp = "没有可查询的数据"; break; } return temp; } }} 完整的项目代码以下:
页:
[1]