Bootstrap JS扩展插件使用实例(9)-datepicker
2013-05-21 19:40 阅读(232)

本文将介绍一款 基于Bootstrap 的简洁的日期插件bootstrap-datepicker.js

该插件需要单独下载。包括如下文件:

datepicker.css

bootstrap-datepicker.js

datepicker.less

less文件可根据需要使用。下面我们就将这个插件的使用详细介绍下。

引入文件

<link href="http://www.see-source.com/bootstrap/css/bootstrap.css" rel="stylesheet">
<script src="http://www.see-source.com/bootstrap/js/jquery.js" type="text/javascript"></script>
<link href="http://www.see-source.com/bootstrap/js/datepicker/css/datepicker.css" rel="stylesheet">
<script src="http://www.see-source.com/bootstrap/js/datepicker/js/bootstrap-datepicker.js" type="text/javascript"></script>

该插件是基于Bootstrap的扩展插件,所以依赖Bootstrap的样式,需要引入bootstrap.css



入门实例

Html代码

<input type="text" value="05/20/2013"  id="dp1">
Js代码
<script type="text/javascript">
$('#dp1').datepicker();
</script>
该插件并没有提供标记创建,必须通过js手工创建。可通过$().datepicker()语句为文本框绑定datepicker插件。文本框的value属性值为日期初始值,日期默认格式为'mm/dd/yyyy',如果未指定value值,将采用当前日期。


参数

名称 类型 默认值 描述
format string 'mm/dd/yyyy' 设置日期格式
weekStart integer 0 设置一个星期的第一天. 0 代表周日 - 6 代表周六
viewMode string|integer 0 = 'days' 设置初始视图模式,可选项: 'days', 'months', 'years'。也可分别用 0 , 1, 2代表。
minViewMode string|integer 0 = 'days' 设置最小视图模式,可选项: 'days', 'months', 'years'。也可分别用 0 , 1, 2代表。

首先对视图模式(viewMode)进行下详细说明。有三种视图模式,从大到小分别为:年份视图(years)、月份视图(months)、日视图(days)。如下:


年份视图


月份视图


日视图


在年份视图中显示年份列表,可以选择某一年份,单击(选择)某一年份后可跳转到月份视图,单击某一月份后又可跳转到日视图,由此来选择年月日。所以视图是有大小级别的,最大是年份视图,最小是日视图。

通过参数viewMode可以设置最大视图(也可叫初始视图),minViewMode设置最小视图。默认情况下,最大视图和最小视图都是日视图。


如何使用参数

有俩种方法进行设置参数:标记 和 js对象 .

1.使用标记设置

在参数名前加前缀"data-date-"后作为dom元素属性。如:data-date-format="dd-mm-yyyy"

demo:

Html代码

<input type="text" id="dp1" value="20-05-2013"   data-date-format="dd-mm-yyyy"  data-date-viewMode="1" data-date-minViewMode="0"  data-date-weekStart="1">
Js代码

<script type="text/javascript">
$('#dp1').datepicker();
</script>
设置最大视图为月份视图,最小视图为日视图。同时设置了一个星期的第一天为星期一。


2.使用js设置

在$().datepicker()创建时,可以传进个对象参数,通过对象的属性设置。如下:

Html代码

<input type="text" id="dp1" value="20-05-2013" >
Js代码

<script type="text/javascript">
$('#dp1').datepicker({format:"dd-mm-yyyy",weekStart:1});
</script>

命令(方法)

另外,插件还提供了如下的几个命令,利用这些命令我们可以通过js对插件进行控制:

.datepicker('show')

打开

.datepicker('hide')

关闭

.datepicker('setValue', value)

设置日期


Html代码

<input type="text" id="dp1" value="20-05-2013" >
<a href="javascript:void(0)"  onClick="open_datepicker()">显示</a>/
<a href="javascript:void(0)"  onClick="hide_datepicker()">隐藏</a>/
<a href="javascript:void(0)"  onClick="set_datepicker()">设值</a>
Js代码

<script type="text/javascript">
$('#dp1').datepicker({format:"dd-mm-yyyy"});

//打开插件
function open_datepicker(){
    $('#dp1').datepicker("show");
}
//关闭插件
function hide_datepicker(){
    $('#dp1').datepicker("hide");
}
//手工赋值
function set_datepicker(){
    $('#dp1').datepicker("setValue", "24-05-2013");
}
</script>

事件


和其他插件一样,对事件的监听是少不了的。一般情况下我们可能用不到事件,只需要获得日期值即可,如果要完成复杂的功能,这些事件就要派上用场。

事件 描述
show 当插件被打开时,该事件被立即触发
hide 和show事件对应。当插件关闭时,该事件被立即触发
changeDate 当日期被修改时,该事件被立即触发
onRender 用于插件每一次被渲染时触发。有俩个返回值:"disabled"、""。默认返回"";

onRender事件用于控制日期的可选范围。当插件每次生成视图或渲染时,对于当前视图中的每个日期都会调用onRender事件,如果事件返回"",则该日期可选,如果返回"disabled",该日期不可选,相应的按钮会呈现灰色(不可选状态)。

另外注意,对于changeDate事件,并非是日期值被改变时才被触发,只要我们单击选择日期的按钮,不管日期是否改变,该事件都会触发。对于onRender事件,不能作为事件设置,需要作为参数设置,下面示例中将会看到如何使用。

Html代码

<input type="text" id="dp1" value="20-05-2013" data-date-format="dd-mm-yyyy">
js代码

<script type="text/javascript">
$('#dp1').datepicker({"onRender": function(date){//添加onRender事件,控制用户只能选择大于当前日期的
    var current = new Date();//获得当前日期
	if(date.valueOf() <= current){//判断日期是否大于当前日期
	   return "disabled";
	}
    return "";

   }}
);

//添加show事件
//$('#dp1').on("show", function(ev){
//       alert("show事件被触发,当前日期:"+ ev.date.toString());
//   }
//);
//添加changeDate事件
//$('#dp1').on("changeDate", function(ev){
//       alert("changeDate事件被触发,当前日期:"+ ev.date.toString());
//   }
//);
</script>

创建自定义日期组件


datepicker插件除了可以对一个文本框进行绑定外,还提供了可对我们自定义的任何组件进行绑定。

Html代码

<div class="input-append date" id="dp2" data-date="12-02-2012" data-date-format="dd-mm-yyyy">
  <input class="span2" size="16" type="text" value="12-02-2012">
  <span class="add-on"><i class="icon-th"></i></span>
</div>
Js代码

$('#dp2').datepicker();
如上代码,对我们自定义的一个div元素进行绑定。对于这样的绑定必须具备俩个条件:


      1.绑定的元素必须有.date 样式

      2.打开或隐藏插件的元素必须有.add-on样式。

具备上面俩个条件后,对于组件内的每个文本框,都会被绑定为日期插件。


设置只读

对于上面的所有示例我们可以发现,如果在文本框中直接输入日期也是可以的,并且会自动与插件的日期保持同步。有时,这种情况是不允许的,如:避免用户输入非法格式的日期或不符合可选范围的日期等。我们可以给文本框设置只读属性readonly。

input type="text" readonly id="dp1"  value="20-05-2013" data-date-format="dd-mm-yyyy" >