firefox重复执行js
作者:yaya | 时间:2009年12月10日 | 分类 学海无涯 | 标签 firefox javascript | 3回复

当不写meta标签的时候(乱写个编码名和不写情况一样),编码不为unicode utf-8 bom时候,出现问题,将重复执行js,所以会弹出两次I'm a bug
这是中文注释引起的。去掉中文注释正常。但是,当把meta写好后,且与文件编码一致时候是没问题的。
.png)
通用js cookie表单填充
作者:yaya | 时间:2009年10月9日 | 分类 学海无涯 | 标签 javascript cookie form 勿忘我 | 3回复
今天发现出了点问题,废置已久的东东再一次次更新中早就忘记了原先的面貌是什么。反正也无所谓,就不管了。
现在从新写个js 的cooies 表单记录填充。
只需在
inputs: ["comment_author", "comment_email", "comment_website"], flag: "comment_remember", form: "commentform"
填写对应的input ID,flag(表示是否记录checkbox),form ID 即可。
而在checkbox我取名为"勿忘我"。唯它最能表示这种感情。(千万不要骂我闷骚!)

代码如下:
-
(function(F) {
-
var inputs = F.inputs || [];
-
if (inputs.length === 0) return;
-
var flag = F.flag || true;
-
var form = F.form;
-
var newfriend = false;
-
var that = this;
-
that.expD = 31536000000; //一年
-
that.cookieName = "ULOVEITINFO";
-
var autoFinish = function() {
-
var value = eval('/' + cookieName + '=([.]*[^;]*)/.exec(document.cookie)||"NEWFRIEND"');
-
if (value != "NEWFRIEND")
-
if (inputs.length === value[1].split(",").length)
-
for (var i = 0; i < inputs.length; i++) document.getElementById(inputs[i]).value = value[1].split(",")[i] || "";
-
} ();
-
var remember = function() {
-
if (document.getElementById(flag).checked) {
-
var expDate = new Date();
-
expDate.setTime(expDate.getTime() + this.expD);
-
var key = "";
-
for (var i = 0; i < inputs.length - 1; i++)
-
key += document.getElementById(inputs[i]).value + ',';
-
key += document.getElementById(inputs[i]).value + ';';
-
document.cookie = cookieName + "=" + key + "expires=" + expDate.toGMTString();
-
}
-
}
-
document.getElementById(form).onsubmit = remember;
-
})({
-
inputs: ["comment_author", "comment_email", "comment_website"], flag: "comment_remember", form: "commentform"
-
});
ps:很多地方说的过期设置用expire是不对的。expires才对。
JavaScript 多维数组类
作者:yaya | 时间:2009年10月7日 | 分类 学海无涯 | 标签 javascript 数组 类 | 0回复
我们知道javascript 的多维数组是通过模拟实现的,比如二维数组a[3][2]的实现:
-
var a = new Array(3)
-
a[0] = new Array(2);
-
a[1] = new Array(2);
-
a[2] = new Array(2);
当然,写出 [ ] 的形式也是一样的意思。
而写成var a = new Array(3,2)是不行的。
可以我们总想事情变得简单。所以写了MyArray。如下:
-
var MyArray = function(){
-
var args = arguments;
-
this.array={
-
toArray:function(){
-
var tempArray;
-
var d= args.length-1;
-
var ts='';
-
tempArray=new Array(args[0]);
-
var vtemp = new Array(d);
-
for (var f=0;f<d;f++){
-
ts+='for(vtemp['+f+']=0;vtemp['+f+']<'+args[f]+';vtemp['+f+']++)';
-
ts+='{';
-
var parm='tempArray';
-
for (var p=0;p<=f;p++) parm+='[vtemp['+p+']]';
-
ts+=parm+'=new Array('+args[(f+1)]+');'
-
}
-
for (var i=0;i<d;i++) ts+='}';
-
eval(ts);
-
return tempArray;
-
}
-
}
-
return this.array.toArray();
-
}
然后就可以直接var myArray = MyArray(2,3,2);
调用时候就可以直接写出myArray[x][y][z]即可
调用的时候如下:
-
var myArray = MyArray(2,3,2);
-
for (var x=0;x<2;x++)
-
for (var y=0;y<3;y++)
-
for (var z=0;z<2;z++)
-
myArray[x][y][z]=x+' '+y+' '+z;
-
-
for (var x=0;x<2;x++)
-
for (var y=0;y<3;y++)
-
for (var z=0;z<2;z++)
-
alert(myArray[x][y][z]);
暂时就一个toArray方法。myArray类型就是Array。而其他的length,sort等都还未写。慢慢加上好了。
好了。就写到这里啦。
jquery 图片居中
作者:yaya | 时间:2009年9月30日 | 分类 学海无涯 | 标签 jquery 居中 javascript | 6回复
看到网上有许多图片居中(水平+垂直)的方法。感觉都不错。
有许多采用的是display:table-cell等的。我觉得这样就完全不顾及IE6的效果。虽然说除IE6其他都表现正常,可是毕竟现在用IE6的人还是很多的。至少网吧就是一个IE6大本营。
除此之外,许多用的是vertical-align:middle,这个IE6下也容易出问题。
其他的选择的方法就感觉复杂了。
但是,我想可以弄个简单的方法来完成这个事情吗?
-
.divimg{
-
height:200px;
-
width:200px;
-
border:1px #000 solid;
-
margin-right:2px;
-
float:left;
-
}
-
-
<div class="divimg">
-
<img src="1.jpg" id="img1" alt="1" />
-
</div>
-
-
<div class="divimg">
-
<img src="2.jpg" id="img2" alt="2" />
-
</div>
-
-
<div class="divimg">
-
<img src="3.jpg" id="img3" alt="3" />
-
</div>
-
我希望,就按照这样的写法,而得到下图的效果:
所以我写了个jquery小插件imgC。
-
(function($){
-
$.extend($.fn, {
-
imgC: function() {
-
var parentHeight = this.parent().height();
-
var parentWidth = this.parent().width();
-
if (parentHeight!==0&&parentHeight!==0){
-
var imgSrc = this.attr("src");
-
this.attr("src","blank.gif");
-
this.css({"background-image":"url("+imgSrc+")","background-repeat":"no-repeat","background-position":"center","width":parentWidth,"height":parentHeight});
-
}
-
}
-
});
-
})(jQuery);
调用时候:
-
$(document).ready(function(){
-
$("#img1").imgC();
-
$("#img2").imgC();
-
$("#img3").imgC();
-
});
javascript语言精粹 笔记二
作者:yaya | 时间:2009年9月17日 | 分类 学海无涯 | 标签 javascript 学习 | 0回复
要是有所得罪请原谅。本是出自一番好意,
只是想显点粗浅技艺,那才是我们的初衷。
------莎士比亚《仲夏夜之梦》
Crockford一定很喜欢莎士比亚吧。在每一章开头,总会引用一段莎士比亚作品里面的句段。而对于前面这段,用在这里是最好不过,因为这也是我的初衷。
以下列举的一些东西可能比较零散,是对笔记一的一些补充。
一 Crockford建议不要使用/*...*/来注释,而用//。这个看起来似乎有点奇怪。我们在C++,Java里面几乎大多都是使用前者的。而Eclipse里面也提供了选中代码后按快捷键直接添加成为/*...*/注释内容的方法。
我们知道,JavaScript的语法是借鉴于Java的。那理应鼓励使用/*...*/的啊。
Crockford在书中举了一个例子来说明:
-
/*
-
var rm_a = /a*/.match(s);
-
*/
我们可以看到,它可能在正则表达式字面上出现。所以会造成不安全。JavaScript的正则表达式是借鉴于Perl,同样Perl也不建议使用/*...*/
二 JavaScript里面只有单一的数字类型,在内部被表示成64位浮点数(double)。同时,没有区分出整数类型,即1===1.0。值NaN(not a number)是一个数值,它表示不能产生正常结果的运算结果。
以下的判断是否为数字要比isNaN好
-
function isNumber(value){
-
return typeof value === 'number' && isFinite(value)
-
}
