Apr 23
输入 imemment.com 没反应
Opera 的 fixed 定位有严重的BUG
<div style=" position:fixed; top:100px; left:20px; width:100px; height:100px; background-color:#006666;">text</div>
这样一个BOX fixed 定位,放在内容很高可以出现滚动条的页面里
把滚动条拉到中间,刷新,你会发现 BOX 不见了,变成绝对定位了,有时候甚至会刷没了
最近在写一个JS浮动功能,除了ie6 Opera的毛病最多了,IE6 人家是前辈 有问题可以理解
Opera实在不行啊·· 只能发泄一下 没本事就别搞那么多浏览器
Apr 14
做了一个FLASH,定时10秒后去调用JS 的方法 close
function close(){
var p=domObj.parentNode;
p.removeChild(domObj)
}
就是删除FLASH自身所在的dom父节点。
很奇怪在Safari下面,时间一到执行close方法浏览器就奔溃
直接用JS去运行close方法 却没有任何异常 用FLASH中的点击去调close也没问题
只能用诡异来形容了,因为肯定是底层的原因造成的
无法找到原因,于是我就用了一个办法,见代码
function close(){
var p=domObj.parentNode;
//执行权给到JS的时候,让他延时10秒,由JS来removeChild
setTimeout(function(){p.removeChild(domObj);},10);
}
奔溃问题解决了,考
有知道深层原因的看官请发表意见 谢谢
Mar 31
看题目可能不太懂什么意思
最近做一些广告库的代码
给第三方去接入,不可能让人家在网站的head标签中给你插入一段js引用
而我考虑到 以js库的形式能以文件的方式缓存,多次使用的时候,提高下载效率
减少服务器压力。
在脚本中 首先要动态在head中插入一段js库的标签
代码如下
(function(){
if(document.getElementById('jsid'))
return;
var s=document.createElement('script');
s.type='text/javascript';
s.id = 'jsid';
s.src='js/test.js';
document.getElementsByTagName('head')[0].appendChild(s);
})();
其中 test.js 有很多工具方法,被封装在一个对象中,我在接下来的代码中需要调用
问题肯定来了,test.js 什么时候加载完成呢,立刻调用它的方法肯定找不到定义啦
思考:
去监听script标签 加载,产生一个回调方法,去触发后面的代码开始
OK 没问题,但是假如有1个以上的脚本都要用这一个JS库呢?他到底在回调中 运行哪个脚本的初始函数?
初始函数都加进去运行好了! 但是你怎么就知道所有的脚本都加载完了呢?
也就是说回调运行的初始函数 不一定都能调得到 ,所以这个方法不行
同样考虑ajax去监听加载状态,产生回调同样不行
解决方法:
在test.js 库的最后一行设置一个全局变量,变量名复杂点防止冲突 比如 $value_version_2010 = "2010.03.21";
在你的脚本这样写
(function(){
if(typeof $value_version_2010 != "undefined"){
//你的代码
}else{
setTimeout(arguments.callee,50);
}
})();
不断去检查这个变量,不存在就延时50秒 重新执行,一旦有了值,你的代码就可以安全执行了
你可以设置个全局变量记录重新执行的次数,来防止无限执行,当然只要是全局变量 你都要考虑命名安全,尽量复杂点吧
各位看官,不知道在这方面谁还有什么高招,欢迎跟帖
Feb 25
javascript本身不支持命名空间,但是我们可以模拟它
例如,要创建一个名为 arc90.components 命名空间,我们首先定义一个空对象arc90:
arc90 = {}
如果叫做arc90的对象已经存在,我们需要先检查一下,然后创建一个空对象:
Feb 23
javascript attachEvent和addEventListener 使用方法
attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
addEventListener方法 用于 Mozilla系列
举例:
document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
如果这样写,那么将会只有medhot3被执行
写成这样:
var btn1Obj = document.getElementById("btn1");
//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1
如果是Mozilla系列,并不支持该方法,需要用到addEventListener
var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);
执行顺序为method1->method2->method3
使用实例:
1。
var el = EDITFORM_DOCUMENT.body;
//先取得对象,EDITFORM_DOCUMENT实为一个iframe
if (el.addEventListener){
el.addEventListener(’’click’’, KindDisableMenu, false);
} else if (el.attachEvent){
el.attachEvent(’’onclick’’, KindDisableMenu);
}
2。
if (window.addEventListener) {
window.addEventListener(’’load’’, _uCO, false);
} else if (window.attachEvent) {
Aug 3
自动跳转页面代码
<script type="text/javascript">
function gotoUrl(){
window.location.href = "http://www.baidu.com";
}
function getTimer(){
timer = setTimeout("gotoUrl()", 1000);
}
</script>
<body onload="getTimer()">
给body插入一段DOM对象
因为IE必须等待body全部加载完成,才能获取body对象,所以不能用 document.body.appendChild(domObject);
代替他用
document.body.insertBefore(domObject, document.body.childNodes[0]);
函数内部执行顺序问题
都知道js是预读所有的function,而不管函数位置在什么地方,再去执行其他的代码
但是直接量的函数是不会预读的
var testFun=function(){}
还有一个就是函数内部,应该是按顺序读的,内部写function最好全部写在最前面
最新评论及回复