当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 麻烦看看这段 javascript 啥问题
帖子发表于 : 2008-01-20 10:17 
头像

注册: 2005-03-30 0:27
帖子: 3294
送出感谢: 0 次
接收感谢: 2
好困,有些迷糊


代码:
// getElementsByClassName
document.getElementsByClassName = function(className,oBox) {
   this.d= oBox || document;
   var children = this.d.getElementsByTagName('*') || document.all;
   var elements = new Array();
   for (var ii = 0; ii < children.length; ii++) {
      var child = children[ii];
      var classNames = child.className.split(' ');
      for (var j = 0; j < classNames.length; j++) {
         if (classNames[j] == className) {
            elements.push(child);
            break;
         }
      }
   }
   return elements;
}

// tabBox function
function dotabBox(){
   var tabBoxs = document.getElementsByClassName('tabBox');
   for (i = 0; i < tabBoxs.length; i++) {
      tag = tabBoxs[i];
      tag.value = 0;
      lis = document.getElementsByClassName('tabTitle', tag);
      tabs = document.getElementsByClassName('tabBody', tag);
      lilen = lis.length;
        //alert(lilen);
      for (t = 0; t < lis.length; t++) {
         li = lis[t];
         li.value = t;
         tab = tabs[t];
         tab.style.display = 'none';
         li.onmouseover=function(){changeTab(this, this.value, tabs, lis)}; //这行怎么回事?
      }
      ndiv = document.createElement('nbBox');
      ndiv.style.display = 'block'   ;
      ndiv.className = 'tabView';
      tag.appendChild(ndiv);
      tag.value = 0;
      changeTab(li, 0, tabs, lis);
   }
}
function changeTab(tab, v, tabs, lis){
   lis[tab.parentNode.value].className = 'tabTitle';
   lis[v].className = 'tabTitleC';
   tab.parentNode.value = v;
   box = tab.parentNode.getElementsByTagName('nbBox')[0];
   box.innerHTML = tabs[v].innerHTML;      
}

// add onload Event
if (document.all){
 window.attachEvent('onload',dotabBox)//IE
}
else{
 window.addEventListener('load',dotabBox,false);//firefox
}


_________________
跃过无数的时间断层,只为了在


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-01-20 10:55 
头像

注册: 2005-03-30 0:27
帖子: 3294
送出感谢: 0 次
接收感谢: 2
谢谢学费的详细解答

引用:
(10时40分23秒) Xuefer: lis/tabs 不对是吧?

(10时40分53秒) Xuefer: (function (tabs,lis) {

li.onmouseover=function(){ changeTab(this, this.value, tabs, lis) }

})(tabs, lis);
(10时40分55秒) Xuefer: 用这个
(10时41分16秒) Xuefer: 百年老药方 一用就见效
(10时44分33秒) Xuefer: 你抄错了
10:45
(10时45分00秒) Xuefer: 你的写法是调用了一个匿名函数, 里面又调用了changeTab
(10时45分15秒) Xuefer: 没有return所以默认return undefined
(10时45分24秒) Xuefer: 返回之后赋值给 onmouseover

(10时45分54秒) Xuefer: 我那个写法是每次循环到这里就调用匿名函数
(10时46分17秒) Xuefer: 进去里面之后, 值已经被拷贝了一份, 对于参数本身来说是个新的拷贝, 也就是新的"引用"
(10时46分26秒) Xuefer: 每个变量对自己都是一个隐含的引用
(10时46分50秒) Xuefer: 只不过普通变量一般拷贝值不拷贝引用罢了

(10时47分14秒) Xuefer: 进去里面之后再 onmouseover=... 匿名函数, 就自然是另一份tabs/lis跟外面无关
(10时47分20秒) Xuefer: 下一次再来又是另外一份
(10时47分49秒) Xuefer: 不用函数 简单用 { var abc = tabs .. 应该不行
(10时48分07秒) Xuefer: js 变量只有 global/function scope, 没有 block scope

(10时48分52秒) Xuefer: var abc = tabs 靠背之后abc跟tabs的确不是同一个玩意, 但是下一次循环 abc还是那个abc

(10时51分08秒) Xuefer: 好. 这个比较 closure
(10时51分27秒) Xuefer: 跟例外的 this 是相反的
(10时51分36秒) Xuefer: 这些都搞懂之后就甚至能猜到他内部是怎么实现这个玩意了
(10时51分56秒) Xuefer: 最近 php 也在讨论增加这方面的功能, 已经有人写 patch 还说了原理 果然跟我想的一样


_________________
跃过无数的时间断层,只为了在


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-01-20 11:03 
头像

注册: 2007-01-15 17:15
帖子: 3766
送出感谢: 0 次
接收感谢: 0 次
我不懂 java ,:) jscript 为什么要用 Hungary 命名法


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-01-20 11:19 
头像

注册: 2005-03-30 0:27
帖子: 3294
送出感谢: 0 次
接收感谢: 2
1. 已经有大师给了详细解答
要点是 js 变量只有 global/function scope, 没有 block scope ,
想 block scope 的效果可以再用匿名函数

2. javascript 不是 java
3. 这不是匈牙利


_________________
跃过无数的时间断层,只为了在


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-01-20 11:21 
头像

注册: 2007-01-15 17:15
帖子: 3766
送出感谢: 0 次
接收感谢: 0 次
谢谢黄大师的解答 :)


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-02-12 14:12 
头像

注册: 2006-08-25 10:37
帖子: 736
送出感谢: 0 次
接收感谢: 0 次
点燃一支蜡烛,而不是诅咒黑夜

对这句话表示支持!


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-02-19 11:04 
头像

注册: 2007-04-06 10:24
帖子: 2487
地址: ~/Shanghai
送出感谢: 0 次
接收感谢: 0 次
建议楼主以后用Firebug调试,一看便知~~~~~~


_________________
http://silenceisdefeat.com/~greco
代码:
''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译