[绍棠]纯JS实现出⽣⽇期[年⽉⽇]下拉菜单
纯JS实现出⽣⽇期[年⽉⽇]下拉菜单
在制作⽹页时,可能需要给⽤户提供注册帐号页⾯,⽤户注册 设计很多信息,其中就有 关于出⽣⽇期的,出于⽤户体验,不想让⽤户⼿动输⼊,⽽HTML5的date,⽬前很多浏览器⽀持的并不是很好,所以就可以⽤JS实现年、⽉、⽇3个下拉框的⽇期选择。具体代码如下:
1、新建⼀个js⽂件,如birthday.js;
function DateSelector(selYear, selMonth, selDay) {//定义函数
this.selYear = selYear;
this.selMonth = selMonth;
this.selDay = selDay;
this.selYear.Group = this;
this.selMonth.Group = this;
// 给年份、⽉份下拉菜单添加处理onchange事件的函数
if (window.document.all != null) // IE
{
this.selYear.attachEvent("onchange", DateSelector.Onchange);
this.selMonth.attachEvent("onchange", DateSelector.Onchange);
}
else // Firefox
{
this.selYear.addEventListener("change", DateSelector.Onchange, false);
this.selMonth.addEventListener("change", DateSelector.Onchange, false);
}
if (arguments.length == 4) // 如果传⼊参数个数为4,最后⼀个参数必须为Date对象
this.InitSelector(arguments[3].getFullYear(), arguments[3].getMonth() + 1, arguments[3].getDate());
else if (arguments.length == 6) // 如果传⼊参数个数为6,最后三个参数必须为初始的年⽉⽇数值
this.InitSelector(arguments[3], arguments[4], arguments[5]);
else // 默认使⽤当前⽇期
{
var dt = new Date();
this.FullYear(), dt.getMonth() + 1, dt.getDate());
}
}
// 增加⼀个最⼩年份的属性--最⽼年份
DateSelector.prototype.MinYear = 1960;
// 增加⼀个最⼤年份的属性--最新年份,即当前时期getFullYear()
DateSelector.prototype.MaxYear = (new Date()).getFullYear();
// 初始化年份
DateSelector.prototype.InitYearSelect = function () {
// 循环添加OPION元素到年份select对象中
for (var i = this.MaxYear; i >= this.MinYear; i--) {
// 新建⼀个OPTION对象
var op = ateElement("OPTION");
// 设置OPTION对象的值
op.value = i;
/
/ 设置OPTION对象的内容
op.innerHTML = i;
// 添加到年份select对象
this.selYear.appendChild(op);
}
}
// 初始化⽉份
DateSelector.prototype.InitMonthSelect = function () {
// 循环添加OPION元素到⽉份select对象中
for (var i = 1; i < 13; i++) {
// 新建⼀个OPTION对象
var op = ateElement("OPTION");
// 设置OPTION对象的值
op.value = i;
// 设置OPTION对象的内容
op.innerHTML = i;
// 添加到⽉份select对象
// 添加到⽉份select对象
this.selMonth.appendChild(op);
}
}
// 根据年份与⽉份获取当⽉的天数
DateSelector.DaysInMonth = function (year, month) {
var date = new Date(year, month, 0);
Date();
}
// 初始化天数
DateSelector.prototype.InitDaySelect = function () {
// 使⽤parseInt函数获取当前的年份和⽉份
var year = parseInt(this.selYear.value);
var month = parseInt(this.selMonth.value);
// 获取当⽉的天数
var daysInMonth = DateSelector.DaysInMonth(year, month);
/
/ 清空原有的选项
this.selDay.options.length = 0;
html下拉菜单的制作方法// 循环添加OPION元素到天数select对象中
for (var i = 1; i <= daysInMonth; i++) {
// 新建⼀个OPTION对象
var op = ateElement("OPTION");
// 设置OPTION对象的值
op.value = i;
// 设置OPTION对象的内容
op.innerHTML = i;
// 添加到天数select对象
this.selDay.appendChild(op);
}
}
// 处理年份和⽉份onchange事件的⽅法,它获取事件来源对象(即selYear或selMonth)
// 并调⽤它的Group对象(即DateSelector实例,请见构造函数)提供的InitDaySelect⽅法重新初始化天数// 参数e为event对象
DateSelector.Onchange = function (e) {
var selector = window.document.all != null ? e.srcElement : e.target;
selector.Group.InitDaySelect();
}
// 根据参数初始化下拉菜单选项
DateSelector.prototype.InitSelector = function (year, month, day) {
// 由于外部是可以调⽤这个⽅法,因此我们在这⾥也要将selYear和selMonth的选项清空掉
// 另外因为InitDaySelect⽅法已经有清空天数下拉菜单,因此这⾥就不⽤重复⼯作了
this.selYear.options.length = 0;
this.selMonth.options.length = 0;
// 初始化年、⽉
this.InitYearSelect();
this.InitMonthSelect();
// 设置年、⽉初始值
this.selYear.selectedIndex = this.MaxYear - year;
this.selMonth.selectedIndex = month - 1;
// 初始化天数
this.InitDaySelect();
// 设置天数初始值
this.selDay.selectedIndex = day - 1;
}
2、在注册表单中的页⾯,引⽤刚才写的js
<script type="text/javascript" src="/js/birthday.js"></script>
<select id="selYear"></select>年
<select id="selMonth"></select>⽉
<select id="selDay"></select>⽇
<!--完成出⽣⽇期的选择--需写在</body>前-->
<script type="text/javascript">
var selYear = ElementById("selYear");
var selMonth = ElementById("selMonth"); var selDay = ElementById("selDay");
// 新建⼀个DateSelector类的实例,将三个select对象传进去
new DateSelector(selYear, selMonth, selDay, 1995, 1, 17);
</script>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论