Запуск функции JavaScript из динамически создаваемой кнопки - PullRequest
0 голосов
/ 25 октября 2011

Обновленный код и выпуск: Я создаю тестовый комплект для моего RPC-сервера. В настоящее время он состоит из страницы, которая немедленно запускает AJAX-запрос для получения всех функций на сервере. Как только это возвращается, он создает список кнопок, чтобы я мог нажать, чтобы проверить. Со временем я добавлю диалоговые окна для проверки передачи параметров в функции, но в настоящее время я хочу просто отключить базовый запрос, когда нажимаю кнопку. Проблема, которую я вижу, заключается в том, что функция onclick всегда запускает последнюю функцию в списке, предположительно, потому что при нажатии клавиши устанавливается последнее значение в массиве. Я думал, что передать значение 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 голосов
/ 25 октября 2011

Назначение element.onClick не будет работать, пока element не будет добавлено к DOM. Вы можете позвонить element.onClick(callRPCFunction(result.result[key])); после foo.appendChild(element);. Это может сработать!

Вы можете использовать jQuery live() здесь, он был создан для этих целей:

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

...