1

我在以下 JavaScript 函数中遇到问题。

我正在尝试根据详细信息动态创建按钮results变量的详细信息动态创建按钮。

创建了按钮并附加了一个事件,但似乎每个按钮都附加了完全相同的事件。

对于附加到按钮的每个事件,我需要地址变量不同,然后添加该按钮以替换macField变量中的文本。

function (results) {
    var r;
    var x, i;
    var btn;
    for (i = 0; i < results.length; i++) {
        app.display("Paired to" + results[i].name + results[i].address);
        x = document.getElementById("message2");
        r = results[i].address;
        w = document.getElementById('macField').value;
        btn = document.createElement('input');
        btn.onclick = function () {
            document.getElementById('macField').value = r;
        };
        btn.setAttribute('type', 'button');
        btn.setAttribute('name', 'sal' + [i]);
        btn.setAttribute('id', 'Button' + [i]);
        btn.setAttribute('value', results[i].name);
        appendChild(btn);
    }
}

function (error) {
    app.display(JSON.stringify(error));
}
4

3 回答 3

1

使用即时功能。更改此部分:

 btn.onclick = function () {
    document.getElementById('macField').value = r;
 };

像这样:

 (function(r){
   btn.onclick = function () {
       document.getElementById('macField').value = r;
     };
 })(r);

看看:http: //jsfiddle.net/uebD8/1/

于 2013-08-27T13:27:01.260 回答
0

create your function seperately like below

    function macFieldValue(val)    
{
    document.getElementById('macField').value = val;
}

and set button onclick attribute like this

btn.setAttribute('onclick', 'macFieldValue('+r+')');
于 2013-08-27T13:35:42.277 回答
0

只是修改这部分:

btn = document.createElement('input');
btn.onclick = function () {
    document.getElementById('macField').value = r;
};

btn = document.createElement('input');
btn.setAttribute('some_id', r);
btn.addEventListener('click',
function (e) {
    var addr = e.source.some_id;
    document.getElementById('macField').value = addr;
}, false);

您正在遭受 JS 的不幸诅咒。如果它不在 for 循环中,您的代码将可以工作。在任何情况下,您都应该使用 addEventListener。

于 2013-08-27T13:41:22.867 回答