利用My97DatePicker实现年份多选

昨天,咱们尝试使用Kalendae实现年份的多选事件,结果发现,该插件不能实现月份以及年份的选择,更不必说年份的多选的事件了。笔者也不愿多做深究,既然My97DatePicker可以定义选择年份,何不简单的改写改写它。笔者秉着这个思路,继续往皮毛之下探索。
先看一下My97DatePicker的习性,俗语讲知己知彼,是吧。这个插件调用之后会改变调用位置的显示内容为当前选择日期。而且还可以给点击位置之外的地方,赋值(笔者就准备利用这点)。
一、通过My97DatePicker自带img

    <input readonly="readonly" id="real_function_position" onpropertychange="get_real_select_year()" style="border: 0px; heigth:0px !important; width: 0px !important; font-size: 0px; z-index: -100;"><!-- 根据变化的时间,函数位置 -->
    <img style="float: left; z-index:1000;" onclick="WdatePicker({el:$dp.$(‘real_function_position‘),dateFmt:‘yyyy‘})" src="My97DatePicker/skin/datePicker.gif"><!-- 点击时间的位置 -->

二、通过My97DatePicker插件重新赋值的事件,定义多选函数

    var already_select_year = [];//已将选择的年份数组,若存在刷新当前。此处的初始值应为,封装数据所得。并且初始化加载时,应同步显示已选择的年份。
            function get_real_select_year(){
                var nowYear = $("#real_function_position").val();
                //判断,当前年份是否为空
                if(nowYear != null & nowYear != ‘‘){
                    //判断,当前年份,是否在选的数组中
                    var index = $.inArray(nowYear, already_select_year);
                    if(index > -1){//含有该列,则不做处理
                        return;
                    }else{//展示,用户的选择。并数组存储
                        already_select_year.push(nowYear);
                        //展示
                        document.getElementById("show_user_select").innerHTML +=
                            "<span id="+ nowYear +">" + nowYear + "<img onclick=‘delete_select("+ nowYear +")‘ src=‘‘> </span>"
                    }
                }else{
                    return;
                }
            }

三、年份选择后的删除

    //删除,当前所选年份事件
            function delete_select(id){
                //数组中除去,该元素
                delete_shuzu(already_select_year, id);
                //清除,用户输入显示
                $("#"+ id).remove();
            }
            //删除数组中的元素
            function delete_shuzu(arry, obj){
                for (var i = 0; i < arry.length;  i++){
                    if(arry[i] == obj){
                        arry.splice(i, 1);
                        break;
                    }
                }
            }

四、贴出整体代码

        <!DOCTYPE html>
        <html>
            <head>
                <meta charset="UTF-8">
                <title>My97DatePicker实现年份多选</title>
            </head>
                <script type="text/javascript" src="js/jquery.js" ></script>
                <script type="text/javascript" src="My97DatePicker/WdatePicker.js" ></script>
            <style>
                .select_year{position: relative;}
                .select_year input{position: absolute; left: 8px; top: 0px;}
            </style>
            <body>
                <div id="show_user_select" style="width: 300px; height: 30px;"></div><!-- 选择时间后,的显示位置 -->
                <div class="select_year">
                    <!--若IE低版本,有一个×××警告错误“不可见的控件,无法获取其焦点...”
                    那么请将real_function_position的type="text",本文这里已将该输入框位置置于img图形之下
                    onpropertychange只是配IE浏览器,此处针对不同类型的浏览器应该判断浏览器执行不同的事件
                    例如:oninput 事件等            -->
                    <input readonly="readonly" type="hidden" id="real_function_position" onpropertychange="get_real_select_year()" style="border: 0px; heigth:0px !important; width: 0px !important; font-size: 0px; z-index: -100;"><!-- 根据变化的时间,函数位置 -->
                    <img style="float: left; z-index:1000;" onclick="WdatePicker({el:$dp.$(‘real_function_position‘),dateFmt:‘yyyy‘})" src="My97DatePicker/skin/datePicker.gif"><!-- 点击时间的位置 -->
                </div>
            </body>
            <script>
                var already_select_year = [];//已将选择的年份数组,若存在刷新界面。此处的初始值应为,封装数据所得
                function get_real_select_year(){
                    var nowYear = $("#real_function_position").val();
                    //判断,当前年份是否为空
                    if(nowYear != null & nowYear != ‘‘){
                        //判断,当前年份,是否在选的数组中
                        var index = $.inArray(nowYear, already_select_year);
                        if(index > -1){//含有该列,则不做处理
                            return;
                        }else{//展示,用户的选择。并数组存储
                            already_select_year.push(nowYear);
                            //展示
                            document.getElementById("show_user_select").innerHTML +=
                                "<span id="+ nowYear +">" + nowYear + "<img onclick=‘delete_select("+ nowYear +")‘ src=‘img/false.png‘> </span>"
                        }
                    }else{
                        return;
                    }
                }
                //删除,当前所选年份事件
                function delete_select(id){
                    //数组中除去,该元素
                    delete_shuzu(already_select_year, id);
                    //清除,用户输入显示
                    $("#"+ id).remove();
                }
                //删除数组中的元素
                function delete_shuzu(arry, obj){
                    for (var i = 0; i < arry.length;  i++){
                        if(arry[i] == obj){
                            arry.splice(i, 1);
                            break;
                        }
                    }
                }
                </script>
        </html>

五、实现效果

笔者认为,定会有比这更好的实现方式。或者笔者写的还有未知的bug,期待有兴趣的人继续探究。笔者现在在想,不玩游戏干点啥呢。

原文地址:http://blog.51cto.com/13479739/2163620

时间: 2024-11-07 22:33:36

利用My97DatePicker实现年份多选的相关文章

利用jQuery实现CheckBox全选/全不选/反选

转自:http://www.cnblogs.com/linjiqin/p/3148259.html jQuery有些版本中实现CheckBox全选/全不选/反选会有bug,经测试jquery-1.3.1.js–>测试通过,jquery-1.5.1.js–>测试不通过. 实现CheckBox全选/全不选/反选代码如下: <%@ page language="java" pageEncoding="UTF-8"%>   <!DOCTYPE

利用switch语句进行多选一判断。

1 <!doctype html> 2 <meta http-equiv="content-type" content="text/html" charset="utf-8"/> 3 switch语句,switch语句用于根据多个不同条件执行不同动作.<br/> 4 如果你希望有选择地执行若干代码块之一,还请使用switch语句. 5 <br/> 6 语法结构如下: 7 <pre> 8

锋利的jQuery——利用is(“:checked”)判断多选框是不是被选中

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <input type="checkbox" id="mybox" ><label for="mybox">我已经阅读了上面制度</la

DevExpress 利用DateEdit 仅显示和选择年份 z

DevExpress只提供了选择月份的控件MonthEdit,并没提供选择选择年份的控件,目测是官方偷懒不想弄,因为要实现的方法也很简单,利用ComboBoxEdit添加年份数据即可,直接封装一个控件轻松搞定的事.当然想偷懒的话,就用DateEdit这个控件稍微设置几个属性也可以做到选择年份的效果 void ToYearStyle(DevExpress.XtraEditors.DateEdit dateEdit, bool touchUI = false) { if (touchUI) { da

基于Kalendaer的日期多选

笔者,最近遇到一个需求,年份的多选事件.笔者之前见到的大多是月份多选,日子多选,时间多选,但是年份多选还是头回遇到.但是呢,有需求就说明有他存在的可然性.对于强大的代码来说,你觉得他能实现的那么他就一定能实现,还有你觉得他不一定的实现的,他有可能可以实现.My97DatePicker插件,不能多选:Kalendae插件,不兼容IE,且也没有关于能支持年份多选的介绍啊.虽然,没有介绍年份的选择,但是呢,笔者想调试一下使其兼容IE,然后像碰运气一样(修手机的,淘了一台低价进水的手机,修修看)看看能否

利用checkbox的到值,并且存到数据库修改的话要显示之前选择的

在前台当然是利用checkbox来得到复选框的语言:{% for language in languages%}<input type="checkbox" name="language" value='{{ language.id }}' >{{ language.name }}{% endfor %}而复选框如果是已经选的在前台就展示的是选择的,那么input的属性就应该有checked 那么就可以通过在前台if来判断language.id跟已经选择

部署 Windows PowerShell Web 访问

部署 Windows PowerShell Web 访问 适用对象:Windows Server 2012, Windows Server 2012 R2 Windows PowerShell® Web Access 在 Windows Server® 2012 中首次引入,充当 Windows PowerShell 网关,可提供以远程计算机为目标的基于 Web 的 Windows PowerShell 控制台. 它可让 IT 专业人士在 Web 浏览器中运行来自 Windows PowerSh

(最小生成树)Codeforces Educational Codeforces Round 9 Magic Matrix

You're given a matrix A of size n?×?n. Let's call the matrix with nonnegative elements magic if it is symmetric (so aij?=?aji), aii?=?0 and aij?≤?max(aik,?ajk) for all triples i,?j,?k. Note that i,?j,?k do not need to be distinct. Determine if the ma

双十一猫狗要约架 理性消费咋成了京东必杀技?

文/张书乐 每年双十一猫狗大战之前,都会在10月例行一道手续--宣战.这不,10月18日,京东就下了约架帖子.在当天举行的"双11"媒体沟通会上,京东集团高级副总裁.京东商城营销平台体系负责人徐雷表示,在经过了多年的市场培育之后,消费者对于"双11"的态度越来越回归于理性,回归于对品质和服务的精挑细选. 言下之意很明显,既然猫猫窝那边总是诱导大家盲目消费.冲动剁手,那么狗狗家就要让大家看一看,啥才叫"好物低价"网络零售新常态下的理性消费. 可这个