Я пишу пользовательский код javascript (а не jQuery), чтобы обрабатывать ответ запроса ajax для соответствия имени имени для имен баз данных (предложения имен). Я не хочу использовать готовый плагин для такого рода работ, поскольку я хочу быть гибким для будущих модификаций.Передача нескольких значений результата ajax функции, вызванной обработчиком события
Аякса ответ имеет следующий вид (JSON массив)
[{"ID":"ID1","name":"name1"},{"ID":"ID2","name":"name2"}]
я покажу вам следующий пример кода, чтобы проиллюстрировать мою текущую задачу:
var response = xmlhttp.responseText;
var result = JSON.parse(response);
var number = result.length;
//box for namesuggestions
var root = document.getElementById('namebox');
var list = document.createElement("ul");
for (var i=0;i<number;i++) {
var element = document.createElement('li');
element.onclick=function() {fillName(this.childNodes[0].nodeValue,this.childNodes[1].value);};
//hidden input field for storage of ID
var eInput = document.createElement('input');
eInput.type = 'hidden';
eInput.value = result[i].ID;
//text field for storage of name
var textElement = document.createTextNode(result[i].name);
element.appendChild(textElement);
element.appendChild(eInput);
list.appendChild(element);
}
root.appendChild(list);
Мой корневой элемент является namebox, где Я показываю найденный список предложений имени внутри нового созданного элемента «ul». Элементы списка создаются в цикле for. Функция fillName
заполнит выбранное имя соответствующими метками input
, которые были использованы для поиска ajax. Моя проблема заключается в переносе выбранных ID
и name
на функцию fillName
в простой форме. Как видите, на данный момент я использую скрытое поле для хранилища идентификаторов. Чтобы получить доступ к name
, я использую this.childNodes[0].nodeValue
и до ID
this.childNodes[1].value
.
Знаете ли вы, что лучший способ передачи нескольких значений в функции, называемые обработчиками событий, возможно, без использования скрытых полей или других элементов html? По какой-то причине я не понимаю, element.onclick=function() {fillAuthor(result[i].name,result[i].ID);};
не работает.
Заранее за вашу помощь.
так насколько я понимаю обработчик события получает функцию, которая возвращает функцию, которая принимает свои зависимости от родительской функции. Я не получаю синтаксис "function (res) {..} (result [i]);". Почему я могу использовать результат [i] здесь, когда я не мог использовать его раньше? –
Эта функция вызывается немедленно, поэтому результат [i] по-прежнему содержит правильные данные, а результат [i] передается в функцию, которая будет использоваться как переменная с именем res. И вы правы, эта функция возвращает функцию, которая используется в качестве обработчика события. – scf1001
, что я и хотел, я попробую это сейчас, пока это выглядит намного проще, чем мой подход. Спасибо. –