建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > asp.net教程 >

js+asp.Net+ajax打造163邮箱效果--checkBox多选

时间:2011-01-04 10:51来源: 作者: 点击:
163邮箱可以通过多选邮件,拖动到左侧的文件夹列表,实现邮件归类的功能 关于我对拖动分配的实现将在后文写出 这里说说在CheckBox的选择中做得尝试和实现的效果、方法 1。点击表格Title实现全选每行 这个早有人做了,我这里借鉴一下 一块贴出来方便大家看 js事件: functi

163邮箱可以通过多选邮件,拖动到左侧的文件夹列表,实现邮件归类的功能
关于我对拖动分配的实现将在后文写出
这里说说在CheckBox的选择中做得尝试和实现的效果、方法

1。点击表格Title实现全选每行
这个早有人做了,我这里借鉴一下 一块贴出来方便大家看
js事件:

function clkAll(myTable,ck)
{
    
var tb =    document.getElementById(myTable); 
    
var objs1 = tb.getElementsByTagName('TR');      
    
for(var i=1; i<objs1.length; i++) {
      
if (objs1[i].getElementsByTagName('TD').item(0).getElementsByTagName('INPUT').length>0)
       objs1[i].getElementsByTagName('TD').item(
0).getElementsByTagName('INPUT').item(0).checked = ck.checked;      
     }

     lastCheck
=null;
    
     RefreshRowStates(tb);
     RefreshRowColor(tb);
}

后台GridView调用js:
<asp:TemplateField>
                                        
<HeaderTemplate>
                                            
<input id="Checkbox2" type="checkbox" onclick="clkAll('grvProjList',this)" runat="server" />
                                  
</HeaderTemplate>
                                        
<ItemTemplate>
                                            
<asp:CheckBox ID="chbox" runat="server" />
                                        
</ItemTemplate>

2。点击GridView每行,实现选中当前行,按住shift实现多选
在JS里,事件有个Bubble过程,大致就是元素的事件(click等)
会先触发当前元素的事件,然后触发上级元素事件
<body onclick="alert('1')">
<input onclick="alert('2')">
</body>
点击文本框将依次提示 2 ,1

因此,点击GridView每行,实现选中当前行,只要考虑对TR元素进行onclick事件处理即可
完整的js代码如下:
function clk(obj,event)
{
    
var el = event.target?event.target:event.srcElement;
         
    
if (el.type != "checkbox" && el.tagName != "A")
    
{             
     obj.getElementsByTagName('TD').item(
0).getElementsByTagName('INPUT').item(0).checked = ! obj.getElementsByTagName('TD').item(0).getElementsByTagName('INPUT').item(0).checked
     }

    
     mov(obj);          
    
    
if (event.shiftKey && lastCheck!=null)
    
{        
        
var tag = 0;
         lastCheck.childNodes[
0].childNodes[0].checked = obj.childNodes[0].childNodes[0].checked;
         mov(lastCheck);
         mou(lastCheck);
        
for(var i=1; i<obj.parentNode.childNodes.length; i++) js+asp.Net ajax开发163邮箱效果--checkBox多选 - 天堂沉沦 - 折腾 .net{
            
if (obj.parentNode.childNodes[i] == obj || obj.parentNode.childNodes[i] == lastCheck)
            
{
                 tag
++;
                
continue;
             }

            
if (tag == 1)
            
{
                 obj.parentNode.childNodes[i].childNodes[
0].childNodes[0].checked = obj.childNodes[0].childNodes[0].checked;
                 mov(obj.parentNode.childNodes[i]); 
                 mou(obj.parentNode.childNodes[i]); 
             }

            
if (tag ==2) break;
         }

     }

    
else
    
{
         lastCheck
=obj;        
     }
    
     RefreshRowStates(obj.parentNode.parentNode);
}
上面的代码有两个if
第一个判断触发事件的元素是不是checkBox或者链接元素
前者是因为本身就是选中事件,后者是因为链接应该是进行其他操作而不是选择当前行

第二个链接是用来实现对按住shift进行多选的实现
毕竟一个个点太麻烦了
163邮箱的shift多选逻辑我没看大明白
于是按照windows的shift多选大致做的:
记住按shift之前的点击行,按住shift点击新行后,两者之间的所有行按照最后点击新行的新状态copy
其中的mov和mou是前文提到的刷新选中颜色的函数
RefreshRowState先不用管
是后面用来统计选中状态的 就是“您选择了**条数据”

后台的代码变成了
    protected void grvProjList_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType == DataControlRowType.DataRow)
        
{           
            
if ((e.Row.RowIndex % 2) == 0)
            
{
                 e.Row.Attributes.Add(
"originalcolor", System.Drawing.ColorTranslator.ToHtml(grvProjList.RowStyle.BackColor));
                 e.Row.Attributes.Add(
"onmouseout", "mou(this,'" + System.Drawing.ColorTranslator.ToHtml(grvProjList.RowStyle.BackColor) + "')");
             }

            
else
            
{
                 e.Row.Attributes.Add(
"originalcolor", System.Drawing.ColorTranslator.ToHtml(grvProjList.AlternatingRowStyle.BackColor));
                 e.Row.Attributes.Add(
"onmouseout", "mou(this,'" + System.Drawing.ColorTranslator.ToHtml(grvProjList.AlternatingRowStyle.BackColor) + "')");
             }


             e.Row.Attributes.Add(
"onmouseover", "mov(this)");            

                 e.Row.Attributes.Add(
"onclick", "clk(this,event)");
           
             e.Row.Attributes[
"style"] = "Cursor:hand";
         }

     }

对于按住Ctrl实现多选,没有必要实现,因为不同于windows的单击单选,
gridView本来就是按住ctrl的效果了(单击增加、删除选择)
(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片