0

次のようなjsonがあります。

contacts = [{"id":"0001","title":"Mr","name_first":"Bob","name_last":"Edwards","address1":"2 ford road","address2":null,"address3":null,"town":"Bedford","county":"Bedfordshire","postcode":"Mk16hd","telephone1":"01827485999","telephone2":null,"email":"bob@email.com"},
{"id":"8003","title":"Mr","name_first":"Joe","name_last":"Bloggs","address1":"186 Bath Road","address2":null,"address3":null,"town":null,"county":null,"postcode":null,"telephone1":"01827485648","telephone2":null,"email":"joe@email.com"},
{"id":"R005","title":"Mr","name_first":"Foo","name_last":"Bar","address1":null,"address2":null,"address3":null,"town":null,"county":null,"postcode":null,"telephone1":"01827485647","telephone2":null,"email":"foo@email.com"}];

次に、このようにループして、それぞれのボタンを作成します。

for (var key in contacts) { 
    if (contacts.hasOwnProperty(key)) {
        var contact = contacts[key];

        var button = document.createElement('button');
        button.innerHTML = '<span class="left-body">Edit</span>';
        button.onclick = function() { editContact(key); return false; };
    }
}

各ボタンをクリックすると、editContact()関数のインデックスの値として「extend」という単語が表示されます。

function editContact (index) {
    console.log(index);
    return false;
}

editContact()Q: これは何ですか? また、各 json アイテムのキーを関数に取得するように設定するにはどうすればよいですか?

4

3 に答える 3

2

閉店のせいです

for (var key in contacts) { 
    if (contacts.hasOwnProperty(key)) {
        var contact = contacts[key];

        var button = document.createElement('button');
        button.innerHTML = '<span class="left-body">Edit</span>';
        button.onclick = (function(key){
            return function() { editContact(key); return false; };
        })(key);
    }
}

デモ:フィドル

于 2013-04-29T13:02:41.437 に答える
0

ボタンをクリックするたびに、キーに割り当てられた最後の値で editContact が呼び出されます。そのため、json 行のインデックスを保持し、そのインデックスをさらに使用する必要があります。

jsonからすべてのキーを取得できるように、次のようにしました。

  function addButtons() {

    for ( var key in contacts) {
        if (contacts.hasOwnProperty(key)) {
            var contact = contacts[key];
            var button = document.createElement('button');
            document.body.appendChild(button);
            button.setAttribute('id', key);
            button.innerHTML = '<span class="left-body">Edit</span>';
            button.onclick = function() {
                editContact(this.id);
                return false;
            };
        }
    }
}


function editContact(index) {
    for ( var key in contacts[index]) {
        console.log("Key :" + key+" Value:"+contacts[index][key]);
    }
    return false;
}

私のhtmlは次のようになります

  <body onload="addButtons();"> </body>
于 2013-04-29T11:51:11.757 に答える
0

contacts配列です。1 つの連絡先のプロパティをループしたい場合は、それを指定する必要があります (例: でcontact[0])。各連絡先のプロパティをループしたい場合は、それらをループする必要があります。

for (var i=0;i<contacts.length;i++) {
    for(var key in contacts[i])

2番目の問題:

button.onclick = function() { editContact(key); return false; };

ボタンをクリックするたびに、キーに割り当てられた最後のeditContact値で呼び出されます。の値を保持したい場合は、次のことができます。key

(function() {
    var currentKey = key;
    button.onclick = function() { editContact(currentKey); return false; };
(());

編集: 連絡先をループしたいだけなので、IE <9をサポートする必要がない場合(またはシムを使用できる場合)、次のことができます:

contacts.forEach(function(element, index) {
    var button = document.createElement('button');
    button.innerHTML = '<span class="left-body">Edit</span>';
    button.onclick = function() { editContact(index); return false; };      
});
于 2013-04-29T11:03:22.983 に答える