<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好像少一个“}”
同意楼上!