存档

2010年10月 的存档

强大的表单验证工具jquer tools-Validator

2010年10月20日 effect 1 条评论

jQuery的tools插件是很贴近实际需求的UI扩展,有tab,tip等,今天介绍表单验证的插件:Validator。

表单验证在WEB项目中太常见了,很简单,但是很烦琐。toos家族中Validator就是来拯救大家的。 下面来简单介绍一下:

一 基本用法
如果要验证某个表单,你仅仅需要一行代码:

$("#myform").validator();

当表单提交的时候,就会来验证。验证规则写在表单元素的属性中,比如某个输入框是必填项目,那么就这样:

<input required="required" name="name" type="text" />

中间的required就是表示这个表单项目是必填!
更加详细的demo请看:http://flowplayer.org/tools/demos/validator/index.html

二 几个配置说明
1 singleError 是否依次验证,还是一次验证所有。如果你想一次验证一个,就设为ture,否则为false

2 effect 错误信息展示的效果,默认为default。你可以建立自己的effect:

$.tools.validator.addEffect("wall", function(errors, event) {
	$.each(errors, function(index, error) {
		// erroneous input
		var input = error.input;//出错的input表单项目
		// error messages for the input (Array)
		var errors = error.messages;//出错的信息,一般取errors[0]
                          alert(errors[0]);
		input.focus();
                          input.css({borderColor: 'red'});
 
	});
}, function(inputs)  {
	// 当验证成功之后的回调
       inputs.css({borderColor: 'blue'});
});

三 自定义出错信息
有时候出错信息不想用系统预先定义的信息,那么在input选项里面加上属性data-message:

<input date-message="出错啦" type="text" />

四 自定义验证选项
当自定义的一些验证规则,有如下两种方法:
1 给自定义的type增加
如想给type为time增加验证规则,那么就:

$.tools.validator.fn("[type=time]", "时间格式不对", function(input, value) {
	return /^\d\d:\d\d$/.test(value);
});

那么在页面中这样既可:

<input  type="time" />

二 验证属性
这个方法是最方便也是最广泛的,如果想验证最小长度:

$.tools.validator.fn("[minlength]", function(input, value) {
	var min = input.attr("minlength");
 
	return value.length &gt;= min ? true : {
		en: "Please provide at least " +min+ " character" + (min &gt; 1 ? "s" : ""),
		fi: "Kentän minimipituus on " +min+ " merkkiä"
	};
});

那么如果有minlength属性的表单都会验证,如:

<input minlength="6" type="text" />

 

后记:这个表单验证的扩展是我见过最为方便使用和自定义和扩展的。本文只是抛砖引玉,给出在使用表单验证的tools的关键点,更加详细的资料请看:

http://flowplayer.org/tools/validator/index.html

分类: javascript 标签:

IE6中的缓存问题

2010年10月15日 effect 3 条评论

今天碰到一个诡异的问题:IE8,FF访问都是正常的情况下,IE6出现了如下情况:
1 清除缓存的情况下,首次访问,正常
2 刷新页面,JS报错:缺少”,或者报错缺少}

大家都知道,IE6的报错很怪异,找不准文件,行数和字符数不能定位,但是在附近能找到。IE6下也没有JS的调试工具(也许有,但是我没用过)。

好了,说一下我的应用场景:在个人中心的某个业务要展示空间的信息,要展示个人空间的信息。

我是这样处理这个逻辑的:载入个人空间信息的JS文件,然后渲染出来。说通俗一点就是在这个页面加载一段JS,这段JS保存了用户空间的信息,然后展示之。

原来不能确定这个JS错误是这一段JS引起,后来观察,发现到展示个人空间的信息的时候卡住了。但是这个JS文件也是正常的,我下载到本地,然后载入他,也没报错。

好,现在好好分析下问题,抓住几个关键点:

1 清除缓存后,首次访问,正常,第二次访问异常。

2 使用抓包工具,这个URL第二次请求是提示用的cache。

所以可能是浏览器cache导致的问题。

现在解决方法:加载这个JS的时候加个时间锉,确保每次都是拉取最新的文件,而不是从缓存中读取。

为什么会这样呢?

也许是和文件的编码有关,因为我页面的编码是UTF-8,而空间信息JS的编码是GBK,我读取这个JS的时候制定了编码是GBK,但是当使用cache的时候,或许这个charset不起作用。

总结:当页面编码和JS文件编码不一致的时候,要注意IE6下的缓存,导致了JS文件的乱码!

分类: javascript 标签:

多项式的保存–JS版本

2010年10月12日 effect 没有评论

PHP版本的在这里:http://web302.com/2010/09/save-more-options/

下面是JS版本:

function selectToDec(select,all){
	var bin='';
	var selectString=select.join(',');
	for( var i=0;i<all.length;i++){
		if(selectString.indexOf(all[i])!=-1){
			bin+='1';
		}
		else bin+='0';
	}
	return parseInt(bin,2);
}
function DecToSelect(dec,all){
	var bin=dec.toString(2);
	if(bin.length<all.length){
		var j=all.length-bin.length;
		for(var i=0;i<j;i++){
			bin='0'+bin;
		}
	}
	var select=[];
	for(var i=0;i<bin.length;i++){
		if(bin[i]==1) select.push(all[i]);
	}
	return select;
}

DEMO:

var all=['足球','篮球','乒乓球','羽毛球'];
var select = ['羽毛球','篮球'];
var i =(selectToDec(select,all));
alert(i);
alert(DecToSelect(i,all));
分类: javascript 标签:

地产之歌

2010年10月6日 effect 没有评论

唉、买房需要XXXX年

分类: 生活 标签:

汪峰–春天里

2010年10月3日 effect 没有评论

哥我真的老了吗?听到这首歌曲的时候居然小小的感动了一把

分类: 生活 标签: