页面载入中..

回到页首回到页尾

使用jquery和cookies控制select表单

interjc [ Web ]

2009.11.30

问题源于一个群里面的提问,在一个网页上添加一个select表单,当用户选择表单的时候,内容区会显示不同的内容,并在该用户下次打开此网页的时候记住这个设置。
像这样的东东一般都会想到要用Cookies来存储设置,方便起见,对于DOM的操作就想到了jQuery(直接写js执行效率会更高,只是,人都是很懒的嘛,呵呵..)。记录下来也算是个笔记吧(Demo)。

首先写这么一个Select下拉表单,以及用来输出被选中项相应内容的块:

<!--以下就是一段普通的select下拉菜单-->
<select id="choose">
		<option value="0">请选择城市</option> 
		<option value="beijing">北京</option> 
		<option value="shanghai">上海</option> 
		<option value="wuhan">武汉</option> 
		<option value="shenzhen">深圳</option> 
  </select>
<div id="output" class="default"></div>

然后是用来处理Cookies的函数,其实jQuery有个插件是干这个的,不过貌似有点小Bug,所以我用的是以下函数:

//这一大段代码你没有必要知道它的确切意思,只要复制粘贴就可以了,他们是用来提供操作Cookies的支持的
function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function dropCookie(name) {
	setCookie(name,"",-1);
}

然后是用来操作表单和Cookies的js:

$(function(){
    //以下部分是提取Cookie并对网页内容进行预设的过程
	var cityChosen = getCookie('citychosen');  //取得cookie中保存的值
	if(cityChosen!=null && cityChosen!=''){    //如果有这个cookie值
		var chosen = $('#choose option[value="'+cityChosen+'"]');  //绑定cookie中保存的那个城市所对应的选项
		chosen.attr('selected',true);  //使此选项变为选定状态
		$("#output").removeClass().addClass(cityChosen).html("你上次选择了<br />" + chosen.text());  //为id为output的div添加class为相应城市名称的类,以便在css中分别定义样式,并输出相应文字
	}
    //以下部分是用户对下拉菜单进行选取的时候,将设置存到Cookie,并对相应内容部分进行设定
	$("#choose").change(function(){
		var selected = $("#choose option:selected");  //浏览者选中一个选项	
		var output = "";
		if(selected.val() != 0){  //如果选项的值不为0
			setCookie('citychosen',selected.val(),365);  //将被选中选项的value值存在名为citychosen的cookie里面,有效期一年
			output = "你这次选择了<br />" + selected.text();  //设定output中的内容
		}
		$("#output").removeClass().addClass(selected.val()).html(output);  //在id为output的div里面输出相应的内容
	});
});

想要效果看得更清楚明白一点,写了一点点小CSS:

*{ margin:0; padding:0;}
body{ font:24px Verdana, Geneva, sans-serif; margin:100px;}
#output{ color:#fff; margin:20px 0; padding:50px; height:200px; width:200px;}
.default{ background:#CCC;}
.beijing{background:red;}
.shanghai{background:blue;}
.wuhan{background:orange;}
.shenzhen{background:plum;}

它们整合起来以后,大概就是如下代码了:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
*{ margin:0; padding:0;}
body{ font:24px Verdana, Geneva, sans-serif; margin:100px;}
#output{ color:#fff; margin:20px 0; padding:50px; height:200px; width:200px;}
.default{ background:#CCC;}
.beijing{background:red;}
.shanghai{background:blue;}
.wuhan{background:orange;}
.shenzhen{background:plum;}
-->
</style>
<script type="text/javascript" src="lib/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
//<![CDATA[
$(function(){
	var cityChosen = getCookie('citychosen');
	if(cityChosen!=null && cityChosen!=''){
		var chosen = $('#choose option[value="'+cityChosen+'"]');
		chosen.attr('selected',true);
		$("#output").removeClass().addClass(cityChosen).html("你上次选择了<br />" + chosen.text());
	}
	$("#choose").change(function(){
		var selected = $("#choose option:selected");		
		var output = "";
		if(selected.val() != 0){
			setCookie('citychosen',selected.val(),365);
			output = "你这次选择了<br />" + selected.text();
		}
		$("#output").removeClass().addClass(selected.val()).html(output);
	});
});
//以下是用来处理Cookies的函数
function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function dropCookie(name) {
	createCookie(name,"",-1);
}
//]]>
</script>
<title>选择表单</title>
</head>
<body>
  <select id="choose">
		<option value="0">请选择城市</option> 
		<option value="beijing">北京</option> 
		<option value="shanghai">上海</option> 
		<option value="wuhan">武汉</option> 
		<option value="shenzhen">深圳</option> 
  </select>
<div id="output" class="default"></div>
</body>
</html>

效果演示可以看这个:Demo

PS:Chrome的安全工作做得可真够彻底的,本地文件居然不可以操作Cookies,害我测试了好久..


可以任意转载, 转载时请务必以超链接形式标明文章原始出处及此声明

本文地址:http://interjc.net/archives/2009/11/30/jquery-cookies-select-form.html

2 条评论

  1. 很好,俺收下了,只是个中的原理很是不清楚。

    img回复

    interjc 回复:

    @刀哥, 写的时候急着出门没写说明,以后有时间加上。

    img回复

评论

欢迎回来,! ( 更改用户 )

输入后可按 Ctrl+Enter 提交评论.