的可能的誤解基本上我有一些事件偵聽器及其處理函數定義如下:的JavaScript循環越過環約束,封
<div id="postTextBlock"/>
<div id="postImageBlock"/>
<div id="postQuoteBlock"/>
<div id="postLinkBlock"/>
document.getElementById('postTextBlock').addEventListener('click', function() { showPostType(postTextBlock) }, false);
document.getElementById('postImageBlock').addEventListener('click', function() { showPostType(postImageBlock) }, false);
document.getElementById('postQuoteBlock').addEventListener('click', function() { showPostType(postQuoteBlock) }, false);
document.getElementById('postLinkBlock').addEventListener('click', function() { showPostType(postLInkBlock) }, false);
var showPostType = (function() {
var postTypes = new Array('postTextBlock', 'postImageBlock', 'postQuoteBlock', 'postLinkBlock')
return function(type) {
for (var i = 0; i < postTypes.length; i++) {
(function(index) { alert(document.getElementById(postTypes[index])) })(i)
}
}
})()
當我運行此我將獲得5個警報。一個用於我的數組中定義的每個postTypes,以及我猜測的最終空值是postTypes[5]
。爲什麼在i = 5
(postTypes.length
= 4)設置for循環終止時,它執行i = 5
的代碼。
編輯: 我添加了它引用的html以及完整的數組值。希望這會清除一些有關代碼無法工作的內容。
你確定長度是'4'嗎?有一個非常基本的循環它的工作原理:http://jsfiddle.net/tbGYV/,所以我猜錯誤是在'postTypes.length'和/或它找不到該元素。 – 2010-10-27 09:48:39
你是否覆蓋了你的數組構造函數? – helle 2010-10-27 09:49:30
Felix Kling:是的,它的4.我在調試器中多次檢查過它。我不知道爲什麼。我第一次遇到錯誤時做的第一件事就是使用您發佈的基本循環。 – PolandSpring 2010-10-27 09:57:51