DIV弹窗后禁止页面滚动,IE和FF通用,基于prototype

DIV弹出之前,禁止页面滚动:
if(Prototype.Browser.IE){
$($$(‘html’)[0]).setStyle({overflow : ‘hidden’});
}else{
$($$(‘body’)[0]).setStyle({overflow : ‘hidden’});
}

DIV关闭之后,恢复页面滚动:
if(Prototype.Browser.IE){
$($$(‘html’)[0]).setStyle({overflow : ‘auto’});
}else{
$($$(‘body’)[0]).setStyle({overflow : ‘auto’});
}

IE6.0及以下版本PNG透明图片不透明解决方案


/*
Correctly handle PNG transparency in Win IE 5.5 & 6.
Copyright 2007 Ignia, LLC
Based in part on code from from http://homepage.ntlworld.com/bobosola.
Edit: Jena.want
Date: 2008.11.30
Web: www.AOBODO.com | www.IsHere.cn

Use in with DEFER keyword wrapped in conditional comments:

*/

(function fixPng() {
var arVersion = navigator.appVersion.split(“MSIE”)
var version = parseFloat(arVersion[1])

if ((version >= 5.5 && version < 7.0) && (document.body.filters)) {
for(var i=0; i
var img = document.images[i];
var imgName = img.src.toUpperCase();
if (imgName.indexOf(“.PNG”) > 0) {
var width = img.width;
var height = img.height;
var sizingMethod = (img.className.toLowerCase().indexOf(“scale”) >= 0)? “scale” : “image”;
img.runtimeStyle.filter = “progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’” + img.src.replace(‘%23′, ‘%2523′).replace(“‘”, “%27″) + “‘, sizingMethod=’” + sizingMethod + “‘)”;
img.src = “images/blank.gif”;
img.width = width;
img.height = height;
}
}
}
})();

这是打好包的文件,需要的朋友可以下载试试。msiepng

另外,如果PNG图片做背景的话,在IE6下也会出现不透明情况,以上脚本只解决了页面中的PNG图片透明,如果是CSS样式中使用了透明的PNG图片,则可以使用以下方案解决透明问题,利用了只有 IE6 才识别的下划线(_),来定义 IE6 浏览器中的滤镜:

#png {
background: url(绝对路径/images/bg.png) repeat;
_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=’true’, sizingMethod=’scale’, src=”绝对路径/images/bg.png”);
_background:none;
}

JS判断客户端是否安装了MSN,Skype,QQ软件








测试环境:WIN SERVER 2008,IE6+,Firefox2.0+,Opera,Chorme

JS jscript做小数乘法运算出现浮点错误的解决办法

在Javascript里计算小数乘法,容易出现浮点错误,例如:



输出结果:

1.4300000000000001
1.32

解决问题的思路就是,先把因数放大为整数,最后再除以相应的倍数,这样就能得到正确的结果了。解决办法如下:
1、 在算式中解决



2、添加到Number的原型方法里


使用方法:假如11*22.9,可以这样写tran(11,22.9),这样,问题就解决了。

正则(JS)re=new RegExp(“^\d*$”);与re=/^d*$/;之间区别?

以下代码结果为:FALSE,TRUE,TRUE , 结果中为什么第一个为FALSE呢?
<form name=form1>
字符串:<input name=”t1″ value=”123456″>
模式:/<input name=”t2″ value=”^d*$”>/
</form>
<script language=javascript>
function c1()
{
re=new RegExp(“^d*$”);
alert(re.test(“123456″));
}
function c2(form)
{
re=new RegExp(form.t2.value);
alert(re.test(form.t1.value));
}
function c3()
{
re=/^d*$/;
alert(re.test(“123456″));
}
c1();
c2(document.form1);
c3();
</script>
第一个应为 re=new RegExp(“^\d*$”);
在引号中需要转义
第一个表达式有双引号,双引号要加多一次转义的,第二个没有,这就是区别

Javascript跨域读取数据的新突破!

首先一点,这里的跨域不是类似 aaa.test.com 和 bbb.test.com的二级域名跨域,这种跨域的问题好像有很多人研究过了,而且也实现了。我这里说的跨域是像www.aaa.com和www.bbb.com这样的跨域。

再说一下我研究的这个跨域所要实现的功能吧,我有自己的域名www.aaa.com,我的域名下有一个图片列表页面,这个页面需要在其他域名,例如www.bbb.com的页面上显示,说到这里,可能有些朋友会说,提供一段代码,在www.bbb.com上iframe一下,不就结了吗,也牵扯不到跨域的问题,但是有一点,如果是ifame的方式在bbb.com上显示的话,这个iframe窗体的高度不是能够随着我的图片页面的高度变化的,也就是说,如果我提供的图片页面很长,那么就会在bbb.com的页面上显示滚动条,这样的话,页面会变得很难看,而这是我所希望的。

好了,说一下我的实现方式,我采用JS直接创建层的方式在bbb.com的show.html页面上直接创建我所需要的数据容器层,

<div id=”Data-Container”></div>

然后再把获取数据的链接get.asp附加到页面上<head>元素里面,利用OBJ.appendChild(obj),

<head>
<script src=”http://www.aaa.com/…/get.asp” id=”Data-Handler”></script>
</head>

在链接页面获取到数据

var content = ‘this is test content’; 以后,

在该页面的底部执行预先定义好的赋值函数

function SetData(){
document.getElementById(‘Data-Container’).innerHTML = content;
}

这样,原本在aaa.com域名下的数据就巧妙的显示到了bbb.com域名下的页面里,关键一点是,层Data-Container的高度会随着获取到数据的大小而自动调整大小,这样,show.html的高度也会自动调整了,就不会出现难看的上下滚动条了。

当然,这只是一个简单的工作原理,其中还有好多需要注意的地方,比如更复杂的回传参数,更新数据等,剩下的下次再写吧。

解决Prototype.js传递中文参数的问题!

2007/06/29 更新:
增加随机码,确保每次都有效读取。

============================

这段时间一直对javascript挺感兴趣的。
前些日子开始用prototype的一些脚本,说起来惭愧,早就存在而且出名的东东,自己竟然不知道,唉。
用prototype.js的Ajax.Request实现异步传递真不错,可以把整个表单转换成string来传递,也可以单独获取某一个文本域的值,可是有一个缺点就是不支持中文参数传递(可能是我没发现),毕竟是老外的写的东东。经过一番琢磨,我发现是在内部脚本中对参数编码的问题,老外不管什么参数都用encodeURIComponent()函数进行编码,而中文则适用于escape()函数。经过测试,问题解决了,可以实现传递中文参数了。在实际应用中,可以指定encoding,若:encoding:”gb2312″,则自动转换为escape()函数进行编码;若不指定encoding则使用默认函数encodeURIComponent()。

我把修改过了prototype.js放上来,需要的朋友下载就是了,版本是1.5.0

Click Here To Download

js操作cookies

function setCookie(name,value) { var Days = 30; var exp = new Date(); //new Date(“December 31, 9998″); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + “=”+ escape (value) + “;expires=” + exp.toGMTString(); } function getCookie(name) { var arr,reg=new RegExp(“(^| )”+name+”=([^;]*)(;|$)”); if(arr=document.cookie.match(reg)) return unescape(arr[2]); else return null; } function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() – 1); var cval=getCookie(name); if(cval!=null) document.cookie= name + “=”+cval+”;expires=”+exp.toGMTString(); }

在JS中实现日期相加

function DateAdd(interval,number,date){
/*
*————— DateAdd(interval,number,date) —————–
* DateAdd(interval,number,date)
* 功能:实现VBScript的DateAdd功能.
* 参数:interval,字符串表达式,表示要添加的时间间隔.
* 参数:number,数值表达式,表示要添加的时间间隔的个数.
* 参数:date,时间对象.
* 返回:新的时间对象.
* var now = new Date();
* var newDate = DateAdd(“d”,5,now);
* author:wanghr100(灰豆宝宝.net)
* update:2004-5-28 11:46
* modify:Jean.want(ishere.cn)
* modifydate:2007-5-23 16:57
*————— DateAdd(interval,number,date) —————–
*/
number=parseInt(number);
switch(interval){
case “y” :
{date.setFullYear(date.getFullYear()+number); break; }
case “q” : { date.setMonth(date.getMonth()+number*3); break; }
case “m” : { date.setMonth(date.getMonth()+number); break; }
case “w” : { date.setDate(date.getDate()+number*7); break; }
case “d” : { date.setDate(date.getDate()+number); break; }
case “h” : { date.setHours(date.getHours()+number); break; }
case “m” : { date.setMinutes(date.getMinutes()+number); break; }
case “s” : { date.setSeconds(date.getSeconds()+number); break; }
default : { date.setDate(d.getDate()+number); break; }
}
return date.toLocaleDateString();
}

JS判断邮箱格式

邮箱格式要求是:

  • 必须包含一个并且只有一个符号@
  • 第一个字符不能是’@'或者’.’
  • 不允许出现’@.’或者’.@’或者’-@’或者’@-’
  • 结尾不得是字符’@'或者’.’
  • 字符@后面只能是’A-Za-z0-9′

<script> function checkMail(str){ var strReg=”"; var r; var strText=document.all(str).value; //strReg=/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/i; strReg=/^w+((-w+)|(.w+))*@{1}w+.{1}w{2,4}(.{0,1}w{2}){0,1}/ig; r=strText.search(strReg); if(r==-1) { alert(“邮箱格式错误!”); document.all(str).focus(); } } </script>

<input name=”email” type=”text” class=”input” id=”email” onChange=”checkMail(‘email’)”>