Почему javascrpt не выбирает кнопку?
Я создаю с помощью javascript, что когда я выбираю кнопку like, она печатает Hi. Я не понимаю, почему при проверке не выбирается кнопка. Я не понимаю, что я делаю не так. Может ли быть такое, что я не получаю url javascript?
index.hmtl
<script src="{% static 'network/index.js' %}"></script>
<form method="post">{%csrf_token%}
<button onclick="darLike()">Like</button>
<a id="resultado"></a>
<svg xmlns="http://www.w3.org/2000/svg" width="16 " height="16 " fill="currentColor " class="bi bi-heart " viewBox="0 0 16 16 ">
<path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01L8 2.748zM8 15C-7.333
4.868 3.279-3.04 7.824 1.143c.06.055.119.112.176.171a3.12 3.12 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15z "/>
</svg>
</form>
index.js
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('click', () => function darLike() {
const contenido = document.querySelector('#resultado')
fetch(`like/${post.id}`, {
method: 'POST',
headers: {
'X-CSRFToken': csrftoken
}
})
// Put response into json form
.then(response => response.json())
.then(data => {
console.log(data);
contenido.innerHTML = "Hi"
})
// Catch any errors and log them to the console
.catch(error => {
console.log('Error:', error);
});
});
// Prevent default submission
return false;
})
Вы добавили click слушателя ко всему документу, что не требуется. Вместо этого вам нужно click событие только на button, которое уже добавлено в вашем html коде.
В приведенном ниже коде
document.addEventListener('click', () => function darLike() {..}))
Ваша функция обратного вызова возвращает another function с именем darLike и не выполняет никакого кода.
При использовании onclick функция должна быть глобально доступна.
Вместо этого вы можете прикрепить событие click к кнопке с помощью addEventListener.
Ссылка DOMContentLoaded доступна на объекте window, а не document. Ссылка
<form method="post"> {% csrf_token %}
<button>Like </button> // Removed onclick
...
</form>
window.addEventListener('DOMContentLoaded', function () {
document.querySelector('button').addEventListener('click', darLike);
function darLike() {
const contenido = document.querySelector('#resultado')
fetch(`like/${post.id}`, {
method: 'POST',
headers: {
'X-CSRFToken': csrftoken
}
})
...
}
});