文章标签 ‘js’
2010六月24

闭包

曾几何时碰到过某考题

var dom;

for (var i = 0; i < 6; i++){

  dom = document.getElementById("rect"+i);

  dom.addEventListener("click", function(){ alert(i)});

}

好吧,很显然无论click哪个dom都会输出6. 问题也很简洁怎么解决这问题. 当时没往闭包那想.

dom.addEventListener("click",(function(){

function ff (f) {

var ffv = f;

function av () {

alert(ffv);

}

return av

}

return ff(i);

})());

胡乱写了一下,其实就是这么回事. 说来说去不过就是个作用域的问题. 今天身体不舒服,  随便写一下. 应该还能再简单些.

2009十二月2

你死了,我耍了点小手段

 话说现在还是在封闭中,心情依旧一般.

记得上周又要做某后台界面, 打开工程,里面全是不认识的代码,一点原来的样子都没有. 看yui都早早的升级到3.x了,由于没有外网,机器上的yui还是依旧杯具的停留在2.6这个版本. 让人看了好是痛心.

又是话说,其实也真就是心血来潮,又想用yui来玩玩. 途中,就开始用完全没用过的一些组件. 例如Calendar , DataTable 这样的东西. 一边看文档一边写,Calendar还好,在使用DataTable的时候我也是如教程上所写 在YAHOO里面定义自己的 namespace , 然后返回一个对象:

{ oDS : , oDT : }

这个 oDS 呢,是 DataSource 的实例 , oDT 当然就是 DataTabl e的实例了. 遇到的问题很白痴,就是到了最后不知道怎么收集 DataTable里面的数据( 现在想起来确实很白痴 ). 也许是太着急了. 也是因为 DataSource 这个名字太引诱人. 看它是和Table一起返回的, 而已实例化Table的时候也是把数据源传到它里面去的. 一心认为从它那里一定能取得我想要的数据. 然后,用for in循环了半天.未果 . 逼不得已自己写了一个数据集来对应表格的操作,得不偿失. 虽然是耍了这么个小手段把问题解决了.

周一,感觉不爽. 这次时间来得稍微多一些, 复又翻文档,胡乱一翻就翻到getRecordSet这个方法.脑袋里顿时轰了一下,靠,以前说用数据集,不都是DataSet 吗.哎. 看来还是封闭久了,脑袋都不灵光. 看见个dataSource就被迷惑了. 惭愧,惭愧.

2009十月25

提高网站性能1

页面中组件的数量可以说是影响响应速度一个至关重要的因素.在没有缓存时,每一个组件都会产生一个http请求(其实即使有缓存ms也会产生,看的时候得到的是一个304的回馈).那为什么请求会影响到响应到响应的速度呢?难道是请求阻塞了,浏览器就不能一口气都下载下来吗?

本来我懒得去理会这样的问题,遗憾的是我还是顺手搜索了下. 这一扯就是http规范了. 该规范建议浏览器从每个主机名并行下载两个组件.当然这个是可以对浏览器设置的.不过脚本就不一样了,就算是从不同的主机,也只能一个一个下载.

所以基本上最差的情况就是将脚本全部放在顶部,最理想的情况当然就是脚本在文档的末尾.这样虽然可能加载整个页面的时间变长,但是对页面的影响也降到了最低.说白了就是进入页面的时候不是白屏的,让用户感觉是死机.哈哈哈.其实本来也就要Dom全部可控了之后才运行javascript的说. jquery,yui都有这样专门的事件.

现在好多事情都是未知数,写写画画浪费这晚上的时间. 夜色如此,却无人共赏,对影酌酒亦是不能, 哎, 不看也罢.

2009四月24

只读的innerHTML

如题,有那么一些标签的innerHTML属性是只读的, 如Table , tr  ,tbody , title , html , style , tfoot , thead 还有什么我也记不得了. 总之,直接替换innerHTML的时候出现一个未知的运行时错误 八成就是这问题. 对了. 貌似错误的嵌套也会有这样的情况. 这个是网上说的 吧div 嵌套在 p里面就会有这样的情况..

2009三月20

忙碌的一周

忙忙碌碌,这一周也就过来了,说实话其实预期的工作量并没有这么大

这周开始就延续上周的牙疼,牙疼初见好转,居然开始喉咙疼,还好持续的时间不长. 然后星期3的时候睡醒发现眼睛又有点肿..看来最近人品急剧降低,应该好生检讨.

这周主要是在弄个聊天,用js写真是繁琐.长连接果然很麻烦. 其实大致上实现有两种.

第一 ,链接. 第二,轮询.

我采用的是第二种. 在一个固定的间隔时间访问服务器.服务器在这段时间内保持这个链接,然后调用js里的方法( 其实就是往客户端写脚本 ). 无论哪一种方法吧,都会用到iframe这个东西.  第一个方法是把href直接指到一个长连接.do这个没试过具体也就不详述了.  后面这种会去链接一个服务器端口比如"18080" , java那边会监听这个端口,一旦有了就会建立一个socket,来和客户端保持联系. 比如http:// riamm.com:18080/io/…. 这样的. 将这样的一个链接frame.location.replace进来就好了. 然后服务器就能持续不断的将数据写入这个iframe.

我说的不是很清楚, 毕竟对java那边一知半解的.希望不要误人子弟( 这个是自己YY出来的.我这又不是热门blog 哈哈 ).  后面说说问题, 这样做在IE里面是没有问题的. 我是说IE6, IE78都没测试. 在firefox里面却就不行.查了半天我确定没有写什么only IE的代码后, 被他们确诊为" 跨域问题 ". 如果这个诊断是正确的, 那么firefox就是把同一个域名下的不同端口的访问也算是跨域了. 最后解决的办法比较笨, 就是直接在外面又包了一个Apache, 所有的请求都走Apache,然后在里面分流,在客户端看来就是同一个域的请求了….

如果谁能有看到这个文章, 又有更好的解决办法. 请告知…大感谢…..

 

2009三月8

IE6改变img src属性的bug

情况是这样的,通过一个<a>标签来改变<img>标签的src属性的时候,图片会被aborted掉( 这个你可以用httpwatch查看. ), 这里的<a>标签是上面有一个按钮样式,当然这个并不重要,代码具体是这样的:

<a href="javascript:void(0)" class="luck active"></a>

javascript:void 这个大家都很清楚是干什么的,这个<a>标签呢,有个onclick的事件.代码大概是

for ( var i = 0; i < length; i++ ) {
    img = document.getElementById( "kyo"+i );
    img.src = srcArr[i];
    img.title = …….;
    ……
}

在IE6或一些比较其他的浏览器( TT,马桶 )里面, 这些个图片就会时不时被aborted掉,鼠标移到上面的时候title居然还能显示,右键->显示图片-图片就能出来,有时候大小还不一样( 就算强制限制大小也木有用 ).怀疑<a>标签即使是javascript:void也不阻止它的某个行为导致把后面的图片线程给干掉了.解决的办法也很简单,在onclick事件的最后 return false 就可以了.

还有老外的说法就是 href = "" . Google有位仁兄发贴说是先把图片加载到一个隐藏的div中是绝对可以解决的. 还有在里面隐藏一个表单的,方法千奇百怪. 我衷心的希望大家不要遇到这样SB的问题. 先到这里了.

写完看了一视频, 桥林MM也就不更新魔兽的视频了.他选择了离开. 哎, 一切都是为生活所迫, 可是TMD生活从来都没有被捕过.

2009二月5

Singleton for JS

var request = request || {};

request.Singleton = ( function () {
    var instance;
    function constructor () {
        // private attr
        var username = "Saber";
        // private method
        function getName () {
            return username;
        }
        return {
            // public method
            alertName : function () {
                alert( getName() );
            }
        };
    }
    return {
        getInstance : function () {
            if ( !instance ) {
                instance = constructor();
            }
            return instance;
        }
    };
   
} )();

request.Singleton.getInstance().alertName();

和AS太不相同了,当然,本身class的实现都不一样,何况Singleton呢.

2009二月3

闭包

闭包是个非常有意思的东西.

这样js也能在某种程度上实现类似private这样的东西.

想写点代码上来,但是又不知道从何写起.

重要的概念是 ,  function 无论是在什么地方调用, 他的作用域都是在定义的位置的.

var f = ( function () {
    var a = 2;
    function test () {
        a *= 2;
        return a;
    }
    return test;
} )()

f();f();

胡乱写一点,只为记录一下

2009一月13

jQuery ajax中文字符的问题

这是一个很烦人的事情. 一般在js里面  escape( value ) , 然后在服务器unescape() 就可以了, 但是在公司无论如何都不行

就好象这样的东西:

var param = ‘a=值&b=值1′;
$.ajax(
     type : ‘post’ ,

     url : url,

     data:param
 );

不知道为什么escape不好使, 最后直接写成 var param = { a:’值’ , b:’值1′ }; 就通过了…很奇怪. 对js太不熟了.

2008十一月27

换一种写法

觉得这样的写法太费了:

obj.cls.prototype.fn = function () {}

没有什么好点的编辑器的时候只能一个字一个字的打很烦.
忘记在什么地方看到的了,jquery也是这么写的,其实这么写没有本质上的区别,我只是觉得这样看起来更加优雅一些:

obj.cls.prototype = {

      n : null ,
      s : null,
      check : function ( value ) {}

};
不管怎么说,这样看起来我觉得舒服很多. 符合大众美感. 这样读起代码来也有点愉悦的心情… 这算是自己找乐么…..呼呼