function addElements(mailbox) {
if (mailbox != 'sent') {
let actionDivArchiveBtn = document.querySelector('#actions')
let archiveButton = document.createElement("button");
archiveButton.classList.add('archive');
archiveButton.innerHTML = `<i class = "fa fa-archive" aria-hidden = "true"></i>`
actionDivArchiveBtn.appendChild(archiveButton);
archiveButton.addEventListener('click', () => {
if (email.archived === false) {
actionDivArchiveBtn.style.color = "blue";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: true
})
})
} else {
actionDivArchiveBtn.style.color = "black";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: false
})
})
}
})
}
load_mailbox('inbox');
}
<div class = "actions">
<span class = "action"><i class = "fa fa-reply" aria-hidden = "true"></i></span>
</div>
<div class = "header">
<span class = "from">${email.sender}</span>
<span class = "date">
<span class = "float-right"></span>${email.timestamp}</span>
</div>
<div class = "title">${email.subject}</div>
<div class = "description">${email.body}</div>
Я создаю gmail как одностраничное приложение, я хочу динамически создать кнопку архива, используя ванильный javascript (кнопка не отображается на моем экране), и я хочу слушать, когда пользователь нажимает кнопку архива, используя прослушиватели событий, затем проверьте если архив равен true, используйте PUT и измените его на false и наоборот.
У меня проблема в том, что моя кнопка не отображается.
Я не знаю, почему, потому что я проверил аналогичные примеры того, как создавать и добавлять кнопки, и был предпринят аналогичный процесс. Пожалуйста, помогите с обзором кода.
<div class = "actions">
<span class = "action"><i class = "fa fa-reply" aria-hidden = "true"></i></span>
</div>
<div class = "header">
<span class = "from">${email.sender}</span>
<span class = "date">
<span class = "float-right"></span>${email.timestamp}</span>
</div>
<div class = "title">${email.subject}</div>
<div class = "description">${email.body}</div>
function addElements(mailbox) {
if (mailbox != 'sent'){
let actionDivArchiveBtn = document.querySelector('#actions')
let archiveButton = document.createElement("button");
archiveButton.classList.add('archive');
archiveButton.innerHTML = `<i class = "fa fa-archive" aria-hidden = "true"></i>`
actionDivArchiveBtn.appendChild(archiveButton);
archiveButton.addEventListener('click',() => {
if (email.archived === false) {
function addElements(mailbox) {
if (mailbox != 'sent') {
let actionDivArchiveBtn = document.querySelector('#actions')
let archiveButton = document.createElement("button");
archiveButton.classList.add('archive');
archiveButton.innerHTML = `<i class = "fa fa-archive" aria-hidden = "true"></i>`
actionDivArchiveBtn.appendChild(archiveButton);
archiveButton.addEventListener('click', () => {
if (email.archived === false) {
actionDivArchiveBtn.style.color = "blue";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: true
})
})
} else {
actionDivArchiveBtn.style.color = "black";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: false
})
})
}
})
}
load_mailbox('inbox');
}
<div class = "actions">
<span class = "action"><i class = "fa fa-reply" aria-hidden = "true"></i></span>
</div>
<div class = "header">
<span class = "from">${email.sender}</span>
<span class = "date">
<span class = "float-right"></span>${email.timestamp}</span>
</div>
<div class = "title">${email.subject}</div>
<div class = "description">${email.body}</div>
function addElements(mailbox) {
if (mailbox != 'sent') {
let actionDivArchiveBtn = document.querySelector('#actions')
let archiveButton = document.createElement("button");
archiveButton.classList.add('archive');
archiveButton.innerHTML = `<i class = "fa fa-archive" aria-hidden = "true"></i>`
actionDivArchiveBtn.appendChild(archiveButton);
archiveButton.addEventListener('click', () => {
if (email.archived === false) {
actionDivArchiveBtn.style.color = "blue";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: true
})
})
} else {
actionDivArchiveBtn.style.color = "black";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: false
})
})
}
})
}
load_mailbox('inbox');
}
<div class = "actions">
<span class = "action"><i class = "fa fa-reply" aria-hidden = "true"></i></span>
</div>
<div class = "header">
<span class = "from">${email.sender}</span>
<span class = "date">
<span class = "float-right"></span>${email.timestamp}</span>
</div>
<div class = "title">${email.subject}</div>
<div class = "description">${email.body}</div>
вместо того, чтобы вставлять весь код, привязанный к вашему контексту... почему бы вам не упростить проблему, пытаясь лучше понять, что вы делаете неправильно? например document.querySelector('actions')
Я сомневаюсь, что он когда-либо вернет какой-либо результат, так как у вас есть действия типа элемента html ??
// select the div housing the archive and reply button
- вы не выбираете ни одного элемента div, document.querySelector('actions')
попытается найти элемент с название тэгаactions
.
@EzioMercer, я думаю, что сделал это, нажал Ctrl + M и Сохранить и вставить в сообщение.
@Chuks Ваш код не работает, так что нет, вы этого не делали. Должна быть кнопка «Выполнить фрагмент кода».
@CBroe, блин, я отредактировал это, чтобы actionDivArchiveBtn = document.querySelector('#actions'). Спасибо за наблюдение. Моя кнопка все еще не отображается
Тогда ваш код для добавления кнопки сам по себе должен работать нормально, jsfiddle.net/a6fq2e84 Тогда вам нужно немного отладить себя, мы не можем сделать это за вас, основываясь на простом фрагменте, который вы показали.
@EzioMercer, я сейчас не использовал его раньше, поэтому подумал, что добавил его. Спасибо
@Chuks Спасибо! Теперь удалите свой код из фрагмента кода и добавьте макет HTML в блок HTML фрагмента кода.
Я добавил свой HTML-код и удалил другой код, которого не было во фрагменте кода.
@Chuks Вы можете (должны) добавить свой HTML-макет и код JS в один фрагмент кода. Фрагмент кода состоит из 4 разделов, 3 из которых предназначены для редактирования (блок HTML вверху слева, блок CSS вверху справа и блок JS внизу слева) и 1 для просмотра вывода. И не забудьте нажать кнопку «Tidy» во фрагменте кода, прежде чем нажать «Сохранить и вставить в сообщение».
Ваш querySelector
вместо actionDivArchiveBtn
неверен. Поскольку вы ищете по id
, но в макете это class
, поэтому я изменил в макете class
на id
, и теперь это работает. Но может быть вам нужно class
в макете, тогда измените #
на .
в querySelector
:
function load_mailbox(string) {
console.info(string);
}
function addElements(mailbox) {
if (mailbox != 'sent') {
let actionDivArchiveBtn = document.querySelector('#actions')
let archiveButton = document.createElement("button");
archiveButton.classList.add('archive');
archiveButton.innerHTML = `SOME TEXT<i class = "fa fa-archive" aria-hidden = "true"></i>`
actionDivArchiveBtn.appendChild(archiveButton);
archiveButton.addEventListener('click', () => {
if (email.archived === false) {
actionDivArchiveBtn.style.color = "blue";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: true
})
})
} else {
actionDivArchiveBtn.style.color = "black";
fetch(`/emails/archive/${id}`, {
method: 'PUT',
body: JSON.stringify({
archived: false
})
})
}
})
}
load_mailbox('inbox');
}
addElements('receive');
<div id = "actions">
<span class = "action"><i class = "fa fa-reply" aria-hidden = "true"></i></span>
</div>
<div class = "header">
<span class = "from">${email.sender}</span>
<span class = "date">
<span class = "float-right"></span>${email.timestamp}
</span>
</div>
<div class = "title">${email.subject}</div>
<div class = "description">${email.body}</div>
Переместите свой код во фрагмент кода (нажмите Ctrl+M в редакторе) и покажите макет HTML!