年月选择框

一、jQuery扩展函数

$.fn.monthPicker = function() {
      var location = {
          windowTop: 0,
          windowLeft: 0,
          inputHeight: 0,
          currentYear:0,
          currentMonth:0,
      };
      var curentMonth = (new Date()).format("MM");
      var currentYear = (new Date()).format("yyyy");
      initialWindow();
      $(this).val(currentYear+"-"+curentMonth);
      $(this).click(function(){
          location.windowTop = $(this).offset().top;
          location.windowLeft = $(this).offset().left;
          location.inputHeight  = $(this).outerHeight();
          location.currentYear = $(this).val().split("-")[0];
          location.currentMonth = $(this).val().split("-")[1];
          $(this).addClass("hasMonthPicker");
          showWindow();
      });
      
      function initialWindow() {
          var html =  "<div id='DatepickerYM' style='display: none;'>"
              +"<div class='Cyear'>"
              +"<div class='preY'></div><span>"+currentYear+"</span><div class='nextY'></div>"
              +"</div>"
              +"<div class='Cmonth'>"
              +"<table>"
              +"<tbody>"
              +"<tr><td id='01'><a>1月</a></td><td id='02'><a>2月</a></td><td id='03'><a>3月</a></td></tr>"
              +"<tr><td id='04'><a>4月</a></td><td id='05'><a>5月</a></td><td id='06'><a>6月</a></td></tr>"
              +"<tr><td id='07'><a>7月</a></td><td id='08'><a>8月</a></td><td id='09'><a>9月</a></td></tr>"
              +"<tr><td id='10'><a>10月</a></td><td id='11'><a>11月</a></td><td id='12'><a>12月</a></td></tr>"
              +"</tbody>"
              +"</table>"
              +"</div>"
              +"</div>";
          var isWindow = $("#DatepickerYM").length;
          if(isWindow<=0){
              $("body").append(html);
          }
      }
      
      function showWindow() {
          $("#DatepickerYM .Cyear span").text(location.currentYear);
          $("#DatepickerYM .Cmonth table tbody td").each(function() {
              $(this).removeClass("select");
          });
          $("#DatepickerYM .Cmonth table tbody td").each(function() {
              if ($(this).attr("id") == location.currentMonth) {
                  $(this).addClass("select");
                  return;
              }
          });
          $("#DatepickerYM").css("left",location.windowLeft+"px");
          $("#DatepickerYM").css("top",(location.windowTop+location.inputHeight)+"px");
          $("#DatepickerYM").fadeIn();
      }
      //区域外点击隐藏
      $(".monthPicker,#DatepickerYM").click(function(event) {
          $(document).one("click", function() { //对document绑定一个影藏Div方法
              var dateSelect = $("#DatepickerYM .Cyear span").text() + "-";
              $("#DatepickerYM .Cmonth table tbody td").each(function() {
                  if ($(this).attr("class") == "select") {
                      dateSelect += $(this).attr("id");
                      return;
                  }
              });
              if ($(".monthPicker.hasMonthPicker").val() != dateSelect) {
                  $(".monthPicker.hasMonthPicker").val(dateSelect);
                  $(".monthPicker.hasMonthPicker").change();
              };
              $("#DatepickerYM").hide();
              $(".monthPicker").removeClass("hasMonthPicker");
          });
          event.stopPropagation(); //阻止事件冒泡到document
      });
      //选择年
      $("#DatepickerYM .Cyear .preY").click(function() {
          var Cyear = Number($("#DatepickerYM .Cyear span").text());
          if (Cyear == 2010) {
              Cyear--;
              $("#DatepickerYM .Cyear span").text(Cyear);
              $(this).css("visibility", "hidden");
              return;
          } else {
              $(this).css("visibility", "visible");
              $("#DatepickerYM .Cyear .nextY").css("visibility", "visible");
              Cyear--;
              $("#DatepickerYM .Cyear span").text(Cyear);
          }
      });
      $("#DatepickerYM .Cyear .nextY").click(function() {
          var Cyear = Number($("#DatepickerYM .Cyear span").text());
          var currentyear = Number(currentYear);
          if (Cyear == currentyear - 1) {
              Cyear++;
              $("#DatepickerYM .Cyear span").text(Cyear);
              $(this).css("visibility", "hidden");
              return;
          } else {
              $(this).css("visibility", "visible");
              $("#DatepickerYM .Cyear .preY").css("visibility", "visible");
              Cyear++;
              $("#DatepickerYM .Cyear span").text(Cyear);
          }
      });
      //选择月
      $("#DatepickerYM .Cmonth table tbody td").click(function() {
          $("#DatepickerYM .Cmonth table tbody td").each(function() {
              $(this).removeClass("select");
          });
          $(this).addClass("select");
          var dateSelect = $("#DatepickerYM .Cyear span").text() + "-";
          $("#DatepickerYM .Cmonth table tbody td").each(function() {
              if ($(this).attr("class") == "select") {
                  dateSelect += $(this).attr("id");
                  return;
              }
          });
          $(".monthPicker.hasMonthPicker").val(dateSelect);
          $(".monthPicker.hasMonthPicker").change();
          $(".monthPicker").removeClass("hasMonthPicker");
          $("#DatepickerYM").hide();
      });
  };

二、HTML页面内使用

<input type="text" class="monthPicker" id="monthData" readonly>
<script type="text/javascript">
   $(".monthPicker").monthPicker({})
</script>

 

转载于:https://my.oschina.net/u/3481089/blog/898402

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<HTML> <HEAD> <title>日三联动下拉</title> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'> <meta name='author' content='http://singlepine.cnblogs.com/'> </HEAD> <body> <form name="form1"> 请选择 选择 选择 日 </form> [removed]<!-- function YYYYMMDDstart() { MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //先给下拉赋内容 var y = new Date().getFullYear(); for (var i = (y-30); i < (y+30); i++) //以今为准,前30,后30 document.form1.YYYY.options.add(new Option(" "+ i +" ", i)); //赋份的下拉 for (var i = 1; i < 13; i++) document.form1.MM.options.add(new Option(" " + i + " ", i)); document.form1.YYYY.value = y; document.form1.MM.value = new Date().getMonth() + 1; var n = MonHead[new Date().getMonth()]; if (new Date().getMonth() ==1 && IsPinYear(YYYYvalue)) n++; writeDay(n); //赋日期下拉 document.form1.DD.value = new Date().getDate(); } if(document.attachEvent) window.attachEvent("onload", YYYYMMDDstart); else window.addEventListener('load', YYYYMMDDstart, false); function YYYYDD(str) //发生变化时日期发生变化(主要是判断闰平) { var MMvalue = document.form1.MM.options[document.form1.MM.selectedIndex].value; if (MMvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} var n = MonHead[MMvalue - 1]; if (MMvalue ==2 && IsPinYear(str)) n++; writeDay(n) } function MMDD(str) //发生变化时日期联动 { var YYYYvalue = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value; if (YYYYvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} var n = MonHead[str - 1]; if (str ==2 && IsPinYear(YYYYvalue)) n++; writeDay(n) } function writeDay(n) //据条件写日期的下拉 { var e = document.form1.DD; optionsClear(e); for (var i=1; i<(n+1); i++) e.options.add(new Option(" "+ i + " 日", i)); } function IsPinYear(year)//判断是否闰平 { return(0 == year%4 && (year0 !=0 || year@0 == 0)); } function optionsClear(e) { e.options.length = 1; } //--> [removed] </body> </HTML>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值