Консоль выводит ошибку о несуществующей функции, хотя я написал ее
Для удаления заметок в своем приложении я поставил svg-иконку, имеющая атрибут onclick = "delete_note();"
Но выводится ошибка:
ReferenceError: delete_note is not defined
at HTMLUnknownElement.onclick
Весьма странно, ведь я создал функцию с данным названием
function add_note(){
section = document.getElementById("all_notes");
var textarea = document.querySelector('textarea');
var date = document.querySelector('input');
save_note = document.createElement("div");
save_note.className = "note";
section.appendChild(save_note);
var text_of_note = document.createElement("div");
text_of_note.className = "text_of_note";
var date_of_note = document.createElement("p");
date_of_note.className = "date_of_note";
var text_for_text_of_note = document.createTextNode(textarea.value);
text_of_note.appendChild(text_for_text_of_note);
var date_for_date_of_note = document.createTextNode(date.value);
date_of_note.appendChild(date_for_date_of_note);
function delete_note(){
section.removeChild(note);
}
var delete_icon = document.createElement("svg");
delete_icon.className = "delete_icon";
delete_icon.setAttribute("onclick", "delete_note();");
save_note.appendChild(text_of_note);
save_note.appendChild(date_of_note);
text_of_note.appendChild(delete_icon);
}
Полный HTML(в section c id=all_notes я скидываю все добавленное)
<body>
<div class="header_of_page">
<div class="title_page">Заметки и Напоминания</div>
<div class="subtitle">Создавай новые идеи и ставь новые задачи</div>
</div>
<section class="create_note">
<div class="box">
<p class="input_intro">Ввод текста</p>
<textarea></textarea>
<p class="input_intro">Добавление даты</p>
<input type="date">
<div class="buttons">
<div class="add-btn" onclick="add_note();">Добавить Заметку</div>
<div class="clear-btn">Очистить все</div>
</div>
</div>
</section>
<section class="notes_lists" id="all_notes">
</section>
Ответы (2 шт):
Предлагаю другое решение проблемы. Если хочется использовать функцию в функции. Возможно решит:
delete_icon.addEventListener('click', () => { delete_note(); });
//delete_icon.setAttribute("onclick", "delete_note;");
Вижу, вы не понимаете область видимости. Если просто, "то, что находится в фигурных скобках, видно только внутри этих фигурных скобок". Ваша функция delete_note объявляется внутри функции add_note. Поэтому вашу delete_note не видно снаружи. Ваш html и тег script находимся в глобальной области видимости (ваша страница). Просто объявите delete_note снаружи add_note. Если вам нужно чтобы у этих функций были общие переменные, их тоже вынесите в глобальную область,
например вот так:
let lastNote = null;
let section = $('#all_notes')
function add_note(){
lastNote = someValue;
…
}
function delete_note(){
section.removeChild(lastNote);
…
}
Если совсем не хотите менять существующий код, занесите delete_note в window:
window.delete_note = function delete_note(){…}