zoukankan      html  css  js  c++  java
  • 两个JS控件List和Pager

    最近几个月一直在做些打杂维护的工作,博客更新得也不勤。转眼2011年将要过去了,希望来年能找回自己的激情。

    这两天做了两个JS控件,一个用于选择多项的List,一个显示分页页码链接等信息。一年多来一直在用JQuery,重新拾一下快忘了的基础JavaScript,顺便用在维护的项目上。

    在写一个查询数据页面时,由于列很多,所以又创建了一设置页面,来选择显示的列。

    开始时是用一个个选择框实现,像这样:

    image 

    所有的Checkbox的Name属性都一样,Value就是列的名称。在检测页面回发时,就可以通过Request[Name]获取到选中的值。这种方式优点是实现简单,生成的HTML代码:

    <span>
        <input type="checkbox" value="类别" name="Columns" id="c0" />
        <label for="c0">类别</label>
    </span>
    <span>
        <input type="checkbox" value="名称" name="Columns" id="c1" />
        <label for="c1">名称</label>
    </span>
    <span>
        <input type="checkbox" value="尺寸" name="Columns" id="c2" />
        <label for="c2">尺寸</label>
    </span>
    

    缺点是不能选择列的顺序,因此这种场合需要更给力的实现。于是我想到了ListBox-一个Asp.Net控件,古老的项目中还能见到它。虽然现在基本不会用了,但现在大家都用前端JavaScript实现它表现的形式和业务逻辑。我从网上找到一个实现,优化下结构和浏览器兼容性,展示一下:

    image

    这种方式要写一些Javascript,其实不算复杂,用不着JQuery。在前端的提交事件中,将选中的项写入到一个隐藏域中,后台就可以读取到这些值。

    下面是分布控件的截图。

    未命名

    当页数比较多时,只显示一定数目的页链接。点击<<或>>可以显示前面或后面的页。

    数据展示页的分页可以分为参数方式和Ajax方式,前者需要对每个链接生成一个地址,后者需要执行一个JS函数。因此我定义了一个Pager对象,存储分页的参数。

            var pager = {
    Total: 555, //总记录数
    Size: 20, //每页记录数
    LinkNumber: 10, //显示链接数
    //LinkAction: "#p={0}" //链接形式
    LinkAction: function (n) { document.title = n }, //执行JS函数形式
    Current:18 //当前页
    };

    根据typeof(pager.LinkAction)==’string’,判断是否是纯链接。若不是,说明是Ajax刷新数据,页面不需要刷新,要复杂一些。

    做了这两个控件后,前端的感觉又回来了。

    下载地址:https://files.cnblogs.com/XmNotes/Pager%26List.zip

    下面两个应用没有JavaScript,是纯CSS的效果。我从网上借鉴的,用在今年的项目中,真得很不错、在这里再回顾一下,希望新一年里能有更多的同行用上它们。新的一年里,让Web更美好,工作更有成就感。

    一个是层级菜单,前面文章提到过:

    http://www.cnblogs.com/XmNotes/archive/2011/04/14/2015980.html

    另一个是将页脚固定在底部的技术,在这篇文章中有非常详细的介绍:http://blog.jobbole.com/10408/

    对今年前端工作一些回顾,2012年将到了,我将把前端的学习重心放在HTML5和CSS3上,希望新年里继续与大家,与博客园一起进步。

  • 相关阅读:
    Java获取输入
    [转载]Eclipse快捷键 10个最有用的快捷键
    运算符优先级
    Error:Cannot build artifact 'seckill:war' because it is included into a circular dependency (artifact 'seckill:war', artifact 'seckill:war exploded')
    spring boot 扫描不到controller情形一
    注解控制事物方法
    <转载>标签接口
    生成二维码(QRcode(for java version)生成二维码)
    Linux 常见命令
    【C#】File.WriteAllText 类的使用(实现自定义日志记录)
  • 原文地址:https://www.cnblogs.com/XmNotes/p/2307809.html
Copyright © 2011-2022 走看看