0

私は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;

}

何らかの理由で、data のインスタンスを displayBook 関数に渡すことができません。

これは私がクロムで得るエラーです

Uncaught ReferenceError: データが定義されていません

4

1 に答える 1

3

問題は次のコードにあります。

link.setAttribute('onclick', 'displayBook(data[i])');

ハンドラーはグローバル コンテキストで実行されるため、dataそこでは定義されません。代わりに実数関数を使用してください:

(function(i) {
    link.onclick = function() { displayBook(data[i]); }
})(i);

その周りの自己実行関数はi、反復ごとに個別に作成する必要があります。

于 2012-07-24T23:16:56.567 に答える