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
页面中组件的数量可以说是影响响应速度一个至关重要的因素.在没有缓存时,每一个组件都会产生一个http请求(其实即使有缓存ms也会产生,看的时候得到的是一个304的回馈).那为什么请求会影响到响应到响应的速度呢?难道是请求阻塞了,浏览器就不能一口气都下载下来吗?
本来我懒得去理会这样的问题,遗憾的是我还是顺手搜索了下. 这一扯就是http规范了. 该规范建议浏览器从每个主机名并行下载两个组件.当然这个是可以对浏览器设置的.不过脚本就不一样了,就算是从不同的主机,也只能一个一个下载.
所以基本上最差的情况就是将脚本全部放在顶部,最理想的情况当然就是脚本在文档的末尾.这样虽然可能加载整个页面的时间变长,但是对页面的影响也降到了最低.说白了就是进入页面的时候不是白屏的,让用户感觉是死机.哈哈哈.其实本来也就要Dom全部可控了之后才运行javascript的说. jquery,yui都有这样专门的事件.
现在好多事情都是未知数,写写画画浪费这晚上的时间. 夜色如此,却无人共赏,对影酌酒亦是不能, 哎, 不看也罢.
2009四月24
如题,有那么一些标签的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
情况是这样的,通过一个<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
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
这是一个很烦人的事情. 一般在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 ) {}
};
不管怎么说,这样看起来我觉得舒服很多. 符合大众美感. 这样读起代码来也有点愉悦的心情… 这算是自己找乐么…..呼呼