如果我有这样的HTML:
<a href="#" class="movieImg"><div class="previewBulk"></div></a>
<a href="#" class="movieImg"><div class="previewBulk"></div></a>
Run Code Online (Sandbox Code Playgroud)
和Javascript这样:
var movie = document.getElementsByClassName("movieImg");
var preview = document.getElementsByClassName("preview");
Run Code Online (Sandbox Code Playgroud)
有没有办法addEventListener2电影标签和预览div标签?我尝试循环,但当我做的事情:
for(var i = 0, j=movie.length; i<j; i++){
movie[i].style.left = 100;
preview[i].style.left = 100;
}
Run Code Online (Sandbox Code Playgroud)
我得到 Uncaught TypeError: Cannot read property 'style' of undefined.
更改预览到previewBulk后,我仍然得到错误,我的代码实际上看起来像这样
(function(){
var movie = document.getElementsByClassName("movieImg"),
preview = document.getElementsByClassName("previewBulk");
//result = [];
for(var i = 0, j=movie.length; i<j; i++){
movie[i].addEventListener("mouseover", function(){
preview[i].style.left = ((movie[i].offsetWidth-preview[i].offsetWidth)/2)+20;
preview[i].style.top = -(movie[i].offsetHeight+preview[i].offsetHeight);
preview[i].style.visibility = "visible";
});
movie[i].addEventListener("mouseout", function(){
preview[i].style.visibility = "hidden";
});
}
}());
Run Code Online (Sandbox Code Playgroud)
document.getElementsByClassName不返回数组.它返回一个遍历XML文件的节点列表.
<a href="#" class="movie"><div class="previewBulk"></div></a>
<a href="#" class="movie"><div class="previewBulk"></div></a>
<script>
var movie = document.getElementsByClassName("movie");
for(var i = 0; i<movie.length; i++){
movie.item(i).style.width = "100px";
}?
</script>
Run Code Online (Sandbox Code Playgroud)
见jsfiddle:http://jsfiddle.net/Uy5fk/
// for each iterates over a list and runs a function for each element
var forEach = Array.prototype.forEach,
// query selector all runs a CSS selector and returns a list of elements
// matching the selector
$$ = document.querySelectorAll.bind(document);
// for each element in the list returned by the CSS selector
forEach.call($$('.movieImg, .preview'), function(v) {
// add an event listener to the click event
v.addEventListener('click', function(e) {
// and run some event handling code.
}, false);
});
Run Code Online (Sandbox Code Playgroud)
当然还有浏览器合规性问题.他们需要支持ES5和DOM2事件.使用填充程序符合浏览器要求.
如果你包括
它应该修复浏览器支持.当然FF4/Chrome/safari5/ie9/Opera10 +已经支持这些了
编辑:
问题实际上是javascript花园中描述的"内部循环闭包问题"
| 归档时间: |
|
| 查看次数: |
31873 次 |
| 最近记录: |