我正在使用JSon数据,我使用dom来显示数据,我想在显示的每个搜索结果中嵌入一个链接,当点击该链接时将该数据实例传递给另一个块并显示该结果
我的HTML代码是
<html>
<body>
<div id:block 1 >
<div id:block 2>
<div id:block 3>
</body>
我的Javascript功能是
function addBooks(data) { // the data is a list of JSON objects
var listdiv = document.createElement('li');
listdiv.setAttribute('id', 'gBookListDiv');
listdiv.innerHTML = ("Books Found:");
parent.appendChild(listdiv);
for(i = 0; i < data.length; i++) {
//create each list item
var listItem = document.createElement('li');
var link = document.createElement('a');
listItem.setAttribute('id', 'gBookListItem');
parent.appendChild(listItem);
link.setAttribute('href', '#');
link.setAttribute('onclick', 'displayBook(data[i])');
listItem.appendChild(link);
}
}
function displayBook(bookData) {
alert(bookData.title);
if(document.getElementById("block2").style.display == "block") {
document.getElementById("block2").style.display = "none";
document.getElementById("block3").style.display = "block";
}
var headerTitle = document.getElementById('book-profile-title-header');
headerTitle.innerHTML = bookData.title;
var title = document.getElementById('book-profile-pic');
headerTitle.innerHTML = bookData.title;
}
由于某种原因,我无法将数据实例传递给displayBook函数。
这是我在Chrome上遇到的错误
未捕获的ReferenceError:未定义数据
答案 0 :(得分:3)
问题在于此代码:
link.setAttribute('onclick', 'displayBook(data[i])');
处理程序在全局上下文中运行,因此data
未定义。请改用真正的函数:
(function(i) {
link.onclick = function() { displayBook(data[i]); }
})(i);
围绕它的自执行函数有必要在每次迭代中创建一个单独的i
。