firefox重复执行js

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

当不写meta标签的时候(乱写个编码名和不写情况一样),编码不为unicode utf-8 bom时候,出现问题,将重复执行js,所以会弹出两次I'm a bug

这是中文注释引起的。去掉中文注释正常。但是,当把meta写好后,且与文件编码一致时候是没问题的。

通用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我取名为"勿忘我"。唯它最能表示这种感情。(千万不要骂我闷骚!)

 代码如下:

JS COOKIE
  1.   (function(F) {
  2.         var inputs = F.inputs || [];
  3.         if (inputs.length === 0) return;
  4.         var flag = F.flag || true;
  5.         var form = F.form;
  6.         var newfriend = false;
  7.         var that = this;
  8.         that.expD = 31536000000; //一年
  9.         that.cookieName = "ULOVEITINFO";
  10.         var autoFinish = function() {
  11.             var value = eval('/' + cookieName + '=([.]*[^;]*)/.exec(document.cookie)||"NEWFRIEND"');
  12.             if (value != "NEWFRIEND")
  13.                 if (inputs.length === value[1].split(",").length)
  14.                 for (var i = 0; i < inputs.length; i++) document.getElementById(inputs[i]).value = value[1].split(",")[i] || "";
  15.         } ();
  16.         var remember = function() {
  17.             if (document.getElementById(flag).checked) {
  18.                 var expDate = new Date();
  19.                 expDate.setTime(expDate.getTime() + this.expD);
  20.                 var key = "";
  21.                 for (var i = 0; i < inputs.length - 1; i++)
  22.                     key += document.getElementById(inputs[i]).value + ',';
  23.                 key += document.getElementById(inputs[i]).value + ';';
  24.                 document.cookie = cookieName + "=" + key + "expires=" + expDate.toGMTString();
  25.             }
  26.         }
  27.         document.getElementById(form).onsubmit = remember;
  28.     })({
  29.         inputs: ["comment_author", "comment_email", "comment_website"], flag: "comment_remember", form: "commentform"
  30.     });

 ps:很多地方说的过期设置用expire是不对的。expires才对。

JavaScript 多维数组类

作者:yaya | 时间:2009年10月7日 | 分类 学海无涯 | 标签 javascript 数组 | 0回复

 我们知道javascript 的多维数组是通过模拟实现的,比如二维数组a[3][2]的实现:

二维数组a[3][2]
  1. var a = new Array(3)
  2. a[0] = new Array(2);
  3. a[1] = new Array(2);
  4. a[2] = new Array(2);

当然,写出 [ ] 的形式也是一样的意思。 

而写成var a = new Array(3,2)是不行的。

可以我们总想事情变得简单。所以写了MyArray。如下:

MyArray
  1. var MyArray = function(){
  2. var args = arguments;
  3. this.array={
  4. toArray:function(){
  5. var tempArray;
  6. var d= args.length-1;
  7. var ts='';
  8. tempArray=new Array(args[0]);
  9. var vtemp = new Array(d);
  10. for (var f=0;f<d;f++){
  11. ts+='for(vtemp['+f+']=0;vtemp['+f+']<'+args[f]+';vtemp['+f+']++)';
  12. ts+='{';
  13. var parm='tempArray';
  14. for (var p=0;p<=f;p++) parm+='[vtemp['+p+']]';
  15. ts+=parm+'=new Array('+args[(f+1)]+');'
  16. }
  17. for (var i=0;i<d;i++) ts+='}';
  18. eval(ts);
  19. return tempArray;
  20. }
  21. }
  22. return this.array.toArray();

 然后就可以直接var myArray = MyArray(2,3,2);

调用时候就可以直接写出myArray[x][y][z]即可

 调用的时候如下:

 

调用
  1. var myArray = MyArray(2,3,2);
  2. for (var x=0;x<2;x++)
  3.   for (var y=0;y<3;y++)
  4.      for (var z=0;z<2;z++)
  5.         myArray[x][y][z]=x+' '+y+' '+z;
  6.  
  7. for (var x=0;x<2;x++)
  8.   for (var y=0;y<3;y++)
  9.      for (var z=0;z<2;z++)
  10.         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下也容易出问题。

其他的选择的方法就感觉复杂了。
 

但是,我想可以弄个简单的方法来完成这个事情吗?

一般写法
  1. .divimg{
  2. height:200px;
  3. width:200px;
  4. border:1px #000 solid;
  5. margin-right:2px;
  6. float:left;
  7. }
  8.  
  9. <div class="divimg">
  10. <img  src="1.jpg" id="img1" alt="1" />
  11. </div>
  12.  
  13. <div class="divimg">
  14. <img  src="2.jpg" id="img2" alt="2" />
  15. </div>
  16.  
  17. <div class="divimg">
  18. <img  src="3.jpg" id="img3" alt="3" />
  19. </div>
  20.  


我希望,就按照这样的写法,而得到下图的效果:



所以我写了个jquery小插件imgC。

imgC
  1. (function($){
  2. $.extend($.fn, {
  3.         imgC: function() {
  4.         var parentHeight = this.parent().height();
  5.         var parentWidth =  this.parent().width();
  6.         if (parentHeight!==0&&parentHeight!==0){
  7.             var imgSrc = this.attr("src");
  8.             this.attr("src","blank.gif");
  9.             this.css({"background-image":"url("+imgSrc+")","background-repeat":"no-repeat","background-position":"center","width":parentWidth,"height":parentHeight});
  10.          }
  11.         }
  12. });
  13. })(jQuery);

调用时候:

调用
  1. $(document).ready(function(){
  2. $("#img1").imgC();
  3. $("#img2").imgC();
  4. $("#img3").imgC();
  5. });


DEMO地址

javascript语言精粹 笔记二

作者:yaya | 时间:2009年9月17日 | 分类 学海无涯 | 标签 javascript 学习 | 0回复

要是有所得罪请原谅。本是出自一番好意,
只是想显点粗浅技艺,那才是我们的初衷。
                                      ------莎士比亚《仲夏夜之梦》

Crockford一定很喜欢莎士比亚吧。在每一章开头,总会引用一段莎士比亚作品里面的句段。而对于前面这段,用在这里是最好不过,因为这也是我的初衷。

以下列举的一些东西可能比较零散,是对笔记一的一些补充。

一 Crockford建议不要使用/*...*/来注释,而用//。这个看起来似乎有点奇怪。我们在C++,Java里面几乎大多都是使用前者的。而Eclipse里面也提供了选中代码后按快捷键直接添加成为/*...*/注释内容的方法。
我们知道,JavaScript的语法是借鉴于Java的。那理应鼓励使用/*...*/的啊。
Crockford在书中举了一个例子来说明: 

不安全的代码
  1. /*
  2.    var rm_a = /a*/.match(s);
  3. */

我们可以看到,它可能在正则表达式字面上出现。所以会造成不安全。JavaScript的正则表达式是借鉴于Perl,同样Perl也不建议使用/*...*/

二 JavaScript里面只有单一的数字类型,在内部被表示成64位浮点数(double)。同时,没有区分出整数类型,即1===1.0。值NaN(not a number)是一个数值,它表示不能产生正常结果的运算结果。 
以下的判断是否为数字要比isNaN好

isNumber
  1. function isNumber(value){
  2.      return typeof value === 'number' && isFinite(value)
  3. }

  1. 1
  2. 2