从动态创建的按钮触发javascript函数

时间:2011-10-24 21:52:19

标签: html button onclick

更新了代码和问题: 我正在为我的RPC服务器创建一个测试工具。目前它由一个页面组成,该页面立即触发AJAX请求以检索服务器上的所有功能。返回后,它会创建一个按钮列表,以便我可以单击进行测试。最后我将添加对话框来测试传递给函数的参数,但是目前我想在单击按钮时触发基本请求。我看到的问题是onclick函数总是触发列表中的最后一个函数,大概是因为当点击被触发时,key被设置为数组中的最后一个值。我想传递button.innerHTML值,但是最后一个button.innerHTML也是最终键的值。

我需要做些什么来正确启动操作?

以下是代码的业务结束:

$(document).ready(function() {

$.jsonRPC.setup({
    endPoint: '//api.localhost/index.php'
});

$.jsonRPC.request('getExampleData', {
    params: [],
    success: function(result) {
        for (var key in result.result) {
            console.log(key+' => '+result.result[key]);

            var button = document.createElement('button'); 
            button.innerHTML = result.result[key]; 
            button.onclick = function() { callRPCFunction(result.result[key]); return false; } 
            var foo = document.getElementById("page"); 
            foo.appendChild(button); 
        }
    },
    error: function(result) {
        console.log(result);
    }
});
});

function callRPCFunction(target) {
    $.jsonRPC.request(target, {
        params: [],
        success: function(result) {
            console.log(result);
        },
        error: function(result) {
            console.log(result);
        }
    }); 
}

1 个答案:

答案 0 :(得分:0)

在将element.onClick添加到element之前,DOM的分配无效。您可以在element.onClick(callRPCFunction(result.result[key]));之后致电foo.appendChild(element);。那可能会奏效!

你可以在这里使用jQuery的live(),它是为了这些目的而创建的:

$(element).live('click', callRPCFunction(result.result[key])

相关问题