2016-05-25 3 views
0

У меня есть ссылка REST backend link mywebsite/guests, которая возвращает список гостей. В передней части я хочу отображать гостей в качестве ссылок. Вот кодДинамически добавить ссылку со строковым параметром

for(guest of guests) { 
    $('#guest_list').append('<a onclick="showGuest(' + guest.id + ')">' + guest.name + '</a><br>') 
} 

function showGuest(id) { 
    console.log(id) 
    ... 
} 

Следует отметить, что guest.id является строкой.

Консоль всегда печатает undefined. Мой вопрос, как я могу добавить эти ссылки со строковыми параметрами?

+0

Вы можете сделать 'console.log (guest)' внутри этого for-loop и поделиться результатами с нами? – gurvinder372

+0

'гость гостей' ?? – Rayon

+0

try 'for (guest guest guest)' – csum

ответ

0
for(guest of guests) { 
    $('#guest_list').append('<a onclick="showGuest(this)" data-id='+guest.id+'>' + guest.name + '</a><br>') 
} 

function showGuest(this) { 

console.log($(this).data('id')) 
} 
+0

id гостя в моем случае - 'string'. –

+0

пусть это вы можете сохранить в атрибутах данных –

0

Путь подойти к этой проблеме зависит от формата и содержания переменной guests. Если вы начали с этим объектом:

var guests = { 
    '123': {id: 123, name: 'joe'}, 
    '234': {id: 234, name: 'jane'} 
}; 

Тогда key будет «123» и «234» в следующем цикле, а значения объекта будет guests[key]:

for(var key in guests) { 
    $('#guest_list').append('<a onclick="showGuest(' + guests[key].id + ')">' + guests[key].name + '</a><br>') 
} 

function showGuest(id) { 
    console.log(id) 
    ... 
} 

Но если вы уже используя jQuery, посмотрите на jQuery.each для другой опции цикла.


С другой стороны, если guests является массивом, как:

var guests = [ 
    {id:"123", name:"joe"}, 
    {id:"234", name:"jane"} 
]; 

тогда вы просто хотите использовать что-то вроде:

for(var i=0; i < guests.length; i++) { 
    // id is guests[i].id 
    // name is guests[i].name 
} 
+0

В моем случае идентификатор гостей - строка. –

+0

Это прекрасно, номер или строка не будут иметь значения здесь. Но является ли 'guest' объектом (как в моем примере) или массивом? например 'var guests = [{id:" 123 ", name:" joe "}, {id:" 234 ", name:" jane "}]' обратите внимание на окружающий '[]' – csum

0

Основная проблема заключается в том, что вы пытаетесь получить доступ к свойствам динамически связанных элементов DOM в вашей функции showGuest(id). Вы должны использовать функцию onClick в следующего ПУТИ

var guests = [{"id":1, "name":"John Doe"}, 
       {"id":2, "name":"David Jones"}]; 

for(guest of guests) { 
    $('#guest_list').append('<a class="guest" data-id="'+guest.id+'">' + guest.name + '</a><br>'); 
} 

$('#guest_list').on('click', 'a.guest', function() { 
    var id = $(this).attr('data-id'); 
    $('.message').text('').append("Clicked guest with ID: "+id); 
}); 

Рабочей JSFiddle здесь - https://jsfiddle.net/2dkpsve8/

Надеется, что это помогает!

+0

, это, безусловно, лучший способ обработки события кликов – csum

0

Поразительно,

$('#guest_list').append('<a onclick="showGuest(' + "guest.id" + ')">' + guest.name + '</a><br>')

работает отлично! Я не знаю, как это сделать. "guest.id" заменяется фактическим идентификатором гостя.

Смежные вопросы