 悬赏园豆:5
                [已解决问题] 
            
                    解决于 2014-06-17 09:37
                悬赏园豆: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>
这是为什么
典型的没有理解闭包,正好这两天刚学的闭包。
假如其他代码都是正确的,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()这样写吗?
你或许连for循环都没进去
不好意思我大意了。我已经把问题改过了。,就在那段不走了,
你这里是注册事件,注册事件怎么能进事件响应?得要触发事件才能进事件响应
dargX = oEvent.clientX - oDiv[i].offsetLeft;这就不走了。,这是为什么?
你去点击那些div试试执行不!
for循环里面的oDivs应该换成oDivs[i]吧!
dargX = oEvent.clientX - oDiv[i].offsetLeft;这就不走了。,这是为什么?
@漫天de光: 要保证右边数据都是Number类型的,你用Number()函数转换一下 试试
@小欢乐: 我只要把for循环去掉就能执行下去
@漫天de光: for循环去掉你能执行?oDiv[i]都成undifined了
@小欢乐: 我把oDiv[i]改成oDiv[0]不是一样吗? 为什么就能下去?
@漫天de光: oDiv[i]改成oDiv[0]肯定不一样的啊,oDiv 是一个数组,可能不止一个元素
@小欢乐: 你说的我知道,我现在关心的是为什么加上for之后
dargX = oEvent.clientX - oDiv[i].offsetLeft;
就会报错,显示offsetLeft;方法未定义
@漫天de光: 那你监视一下oDiv[i],看看是什么。也许是offsetLeft出错了,网上搜一下offsetLeft的兼容性问题
可以把dargX = oEvent.clientX - oDiv[i].offsetLeft;中的oDiv[i]改成this
你的function好像少一个“}”
同意楼上!