| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2414 人关注过本帖
标题:[原创]纯javascript联动的例子
只看楼主 加入收藏
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
 问题点数:0 回复次数:2 
[原创]纯javascript联动的例子

有人想要学习下纯javascript联动的一些技巧,我这里就以日期的联动为例,附上一些代码
至于复杂的省市区联动,不建议用纯javascript的,而是用ajax的方式,该不在此讨论范围内,想要了解ajax是什么,最好去ajax板块看看

首先贴出的是普通编码下的日期联动代码:
1楼贴出的是整理过后的可重用框架代码,需要prototype框架支持(懒得写独立于prototype框架的代码了……)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>日期动态联动演示</title>
<script type="text/javascript">
var oYears,oMonths,oDays,isLeapYear;
var iy,im,id;

window.onload=function () {
initDate();
}

function initDate() {
isLeapYear=false;
oYears=document.getElementById('years'); //获得year的select
oMonths=document.getElementById('months'); //获得month的select
oDays=document.getElementById('days'); //获得day的select
initYears(); //初始化年份
//设定三个select的onChange事件
oYears.onchange=chgYear;
oMonths.onchange=chgMonth;
oDays.onchange=chgDay;
}

function initYears() {
oYears.length=1;
var cYear=new Date().getYear();
for (var i=cYear-20;i<=cYear;i++) //从当前年份前20年开始循环,可以自己更改循环区间
{
var o=new Option(i.toString(),i.toString());
oYears.add(o);
}
}

function chgYear() {
try
{
isLeapYear=false;
var year=parseInt(this.options[this.selectedIndex].value); //获得选择的年份
//判断是否是闰年,不懂公式的自己百度
if (year%4==0) isLeapYear=true;
if (year%100==0 && year%400!=0) isLeapYear=false;
if (year%100==0 && year%400==0) isLeapYear=true;
initMonths(); //为了体现联动的效果,这里没选择一次年份都初始化一次月份
}
catch(e){;}
}

function initMonths() {
oMonths.length=1;
for (var i=1;i<13;i++) //月份是1~12月
{
var o=new Option(i.toString(),i.toString());
oMonths.add(o);
}
}

function chgMonth() {
try
{
var month=this.options[this.selectedIndex].value;
if (month!='')
{
var days;
if (month.replace(/(1|3|5|7|8|10|12)/ig,'')=='') //判断是否为大月
days=31;
else if (month.replace(/(4|6|9|11)/ig,'')=='') //判断是否为小月
days=30;
else if (month=='2' && isLeapYear) //判断当是2月时,是否为闰月
days=29;
else
days=28;
initDays(days);
}
}
catch(e) {;}
}

function initDays(days) {
oDays.length=1;
for (var i=1;i<=parseInt(days);i++) //循环显示天数
{
var o=new Option(i.toString(),i.toString());
oDays.add(o);
}
}

function chgDay() {
//改变日期时,调用该函数
try
{
var year=oYears.options[oYears.selectedIndex].value;
var month=oMonths.options[oMonths.selectedIndex].value;
var day=this.options[this.selectedIndex].value;
alert('您选择了'+year+'年'+month+'月'+day+'日');
}
catch(e) {;}
}
</script>


</head>

<body>
<div>
<select id="years">
<option value="">选择年份</option>
</select>
<select id="months">
<option value="">选择月份</option>
</select>
<select id="days">
<option value="">选择日子</option>
</select>
</div>
</body>
</html>


[此贴子已经被作者于2006-10-30 13:13:17编辑过]

搜索更多相关主题的帖子: javascript 例子 
2006-10-30 13:00
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 

可重用的框架:xDynDate.js
(prototype框架下载:

c6schiVP.rar (10.52 KB)


//javascript document
var xDynDate=Class.create();
xDynDate.prototype={
initialize:function(oY,oM,oD,bY,eY,dayHandler) {
this.oY=oY;
this.oM=oM;
this.oD=oD;
this.bY=bY;
this.eY=eY;
this.dayHandler=dayHandler;
this.isLeapYear=false;
try
{
Event.observe(this.oY,'change',this.chgYear.bindAsEventListener(this),false);
Event.observe(this.oM,'change',this.chgMonth.bindAsEventListener(this),false);
Event.observe(this.oD,'change',this.chgDay.bindAsEventListener(this),false);
}
catch(e) {;}
this.initYears();
},

initYears:function() {
this.oY.length=0;
this.oY.add(new Option('请选择年份',''));
for (var i=this.bY;i<=this.eY;i++)
{
var o=new Option(i.toString(),i.toString());
this.oY.add(o);
}
},

initMonths:function() {
this.oM.length=0;
this.oM.add(new Option('请选择月份',''));
for (var i=1;i<=12;i++)
{
var o=new Option(i.toString(),i.toString());
this.oM.add(o);
}
},

initDays:function(days) {
this.oD.length=0;
this.oD.add(new Option('请选择日子',''));
for (var i=1;i<=parseInt(days);i++)
{
var o=new Option(i.toString(),i.toString());
this.oD.add(o);
}
},

chgYear:function() {
try
{
this.isLeapYear=false;
var year=parseInt(this.oY.options[this.oY.selectedIndex].value);
if (year%4==0) this.isLeapYear=true;
if (year%100==0 && year%400!=0) this.isLeapYear=false;
if (year%100==0 && year%400==0) this.isLeapYear=true;
this.initMonths();
}
catch(e){;}
},

chgMonth:function() {
try
{
var month=this.oM.options[this.oM.selectedIndex].value;
if (month!='')
{
var days;
if (month.replace(/(1|3|5|7|8|10|12)/ig,'')=='')
days=31;
else if (month.replace(/(4|6|9|11)/ig,'')=='')
days=30;
else if (month=='2' && this.isLeapYear)
days=29;
else
days=28;
this.initDays(days);
}
}
catch(e) {;}
},

chgDay:function() {
if (this.dayHandler)
this.dayHandler.call(this);
}
}


演示代码网页:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>日期动态联动演示</title>
<script type="text/javascript" src="jsf/prototype-1.4.0.js"></script><!--需要prototype框架支持-->
<script type="text/javascript" src=jsf/xDynDate.js"></script>
<script type="text/javascript">
//<![CDATA[
window.onload=function () {
var cYear=new Date().getYear();
//构造函数,前三个参数分别是年月份的三个select元素,第四第五个参数是现实年份的区间,最后一个参数是选择了日子后执行的函数
new xDynDate($('years'),$('months'),$('days'),cYear-20,cYear,dayHandler);
}

function dayHandler() {
try
{
oYears=$('years');
oMonths=$('months');
oDays=$('days');
var year=oYears.options[oYears.selectedIndex].value;
var month=oMonths.options[oMonths.selectedIndex].value;
var day=oDays.options[oDays.selectedIndex].value;
alert('您选择了'+year+'年'+month+'月'+day+'日');
}
catch(e) {;}
}
//]]>
</script>
</head>

<body>
<div>
<select id="years">
</select>
<select id="months">
</select>
<select id="days">
</select>
</div>
</body>
</html>


[此贴子已经被作者于2006-10-30 13:13:46编辑过]


个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2006-10-30 13:03
神州游侠
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-5-20
收藏
得分:0 
顶一下,呵呵。

2007-01-02 01:06
快速回复:[原创]纯javascript联动的例子
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023488 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved