首页 新闻 会员 周边 捐助

js代码走到一半不走了求给看看那

0
悬赏园豆:5 [已解决问题] 解决于 2014-06-17 09:37

<script type="text/javascript">
window.onload = function (){
var oDiv = document.getElementsByClassName("facebox") ; //根据类名获取一个数组

//循环取值
for(var i=0;i<oDiv.length;i++){
 
  oDiv[i].onmousedown = function(ev){  
     var oEvent = ev || event;
    dargX = oEvent.clientX - oDiv[i].offsetLeft;//程序进不去这个方法
  
 }

}

</script>

 

 

这是为什么

康大头的主页 康大头 | 初学一级 | 园豆:25
提问于:2014-05-13 15:59
< >
分享
最佳答案
2

典型的没有理解闭包,正好这两天刚学的闭包。

假如其他代码都是正确的,for循环可以改成这样的

for(var i=0;i<oDiv.length;i++){
 oDiv[i].onmousedown = (function(j){
        return function(ev){  
            var oEvent = ev || event;
            dargX = oEvent.clientX - oDiv[j].offsetLeft;//程序进不去这个方法
     }
    })(i);
}

那个offsetLeft是属性还是方法?如果是方法不是应该offsetLeft()这样写吗?

收获园豆:5
ThreeTree | 小虾三级 |园豆:1490 | 2014-05-13 20:28
其他回答(7)
0

你或许连for循环都没进去

caomoshijia | 园豆:202 (菜鸟二级) | 2014-05-13 16:03

不好意思我大意了。我已经把问题改过了。,就在那段不走了,

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 16:27
0

你这里是注册事件,注册事件怎么能进事件响应?得要触发事件才能进事件响应

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-13 16:04

   dargX = oEvent.clientX - oDiv[i].offsetLeft;这就不走了。,这是为什么?

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 16:28
0

你去点击那些div试试执行不!

刘宏玺 | 园豆:14020 (专家六级) | 2014-05-13 16:07
0

for循环里面的oDivs应该换成oDivs[i]吧!

sam.c | 园豆:148 (初学一级) | 2014-05-13 16:24

   dargX = oEvent.clientX - oDiv[i].offsetLeft;这就不走了。,这是为什么?

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 16:28

@漫天de光: 要保证右边数据都是Number类型的,你用Number()函数转换一下 试试

支持(0) 反对(0) sam.c | 园豆:148 (初学一级) | 2014-05-13 16:32

@小欢乐: 我只要把for循环去掉就能执行下去

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 16:40

@漫天de光: for循环去掉你能执行?oDiv[i]都成undifined了

支持(0) 反对(0) sam.c | 园豆:148 (初学一级) | 2014-05-13 16:58

@小欢乐: 我把oDiv[i]改成oDiv[0]不是一样吗? 为什么就能下去?

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 17:01

@漫天de光: oDiv[i]改成oDiv[0]肯定不一样的啊,oDiv 是一个数组,可能不止一个元素

支持(0) 反对(0) sam.c | 园豆:148 (初学一级) | 2014-05-13 17:09

@小欢乐: 你说的我知道,我现在关心的是为什么加上for之后

  dargX = oEvent.clientX - oDiv[i].offsetLeft;

就会报错,显示offsetLeft;方法未定义

支持(0) 反对(0) 康大头 | 园豆:25 (初学一级) | 2014-05-13 17:12

@漫天de光: 那你监视一下oDiv[i],看看是什么。也许是offsetLeft出错了,网上搜一下offsetLeft的兼容性问题

支持(0) 反对(0) sam.c | 园豆:148 (初学一级) | 2014-05-13 17:18
0

可以把dargX = oEvent.clientX - oDiv[i].offsetLeft;中的oDiv[i]改成this

carany | 园豆:204 (菜鸟二级) | 2014-05-14 10:04
0

你的function好像少一个“}”

Albert Fei | 园豆:2102 (老鸟四级) | 2014-05-20 17:25
0

同意楼上!

shengnet | 园豆:31 (初学一级) | 2014-06-05 16:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册