Во-первых, я делаю предположение здесь:
- Что вы хотите
id
сообщения электронной почты в этой функции клика, а не индекс, например 0, 12, 32, 5
, а не 0, 1, 2, 3
.
Учитывая, что (легко настроить с помощью .index()
, если предположение неверно), вы можете сделать это:
function CheckForNewMail() {
MailInInbox[0] = ["0", "Mail One"];
MailInInbox[1] = ["12", "Mail Two"];
MailInInbox[2] = ["32", "Mail Three"];
MailInInbox[3] = ["5", "Mail Four"];
$('#mail-in-inbox').empty();
var size = 4, element = $('#mail-in-inbox');
for(i = 0; i < size; ++i) {
$('<a href="#" class="inbox-link">'+ MailInInbox[i][1] +'</a>')
.data('id', MailInInbox[i][0]).wrap('<li/>').parent().appendTo(element);
}
}
ЕстьНесколько изменений здесь:
- Литералы массива, намного более простая запись
- Правильное
var
объявление переменных (если они еще не определены в другом месте) - Использование
.data()
для хранения id
на <a>
, который мы только что создали
Затем, используя эти сохраненные данные, мы можем присоединить обработчик single на #mail-in-inbox
контейнер один раз (при готовности DOM), а не на один на каждый <a>
каждый раз, когда эта функция запускается, она должна выглядеть следующим образомэто:
$('#mail-in-inbox').delegate('.inbox-link', 'click', function() {
alert("Button "+ $.data(this, 'id') +" clicked!");
});
Это будет отображать "Button 0 clicked!"
, "Button 12 clicked"
и т. д. Вы можете проверить все вышеперечисленное в демонстрационной версии здесь .