[英]Button Event-listener is unresponsive
我正在關注一個教程,並且做了一個按鈕來顯示一些內容。 但是,此按鈕不起作用,我不知所措,無法弄清楚是什么原因引起的。
有人可以顯示為什么這行不通嗎?
const users = document.querySelector('#user'); const getUsers = document.getElementById('getUsers'); getUsers.addEventListener('click', loadUsers); var loadUsers = () => { console.log('hello button clicked') let xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.github.com/users', true); xhr.onload = () => { if (this.status == 200) { let gusers = this.responseText console.log(gusers); } } xhr.send() } console.log(getUsers)
<h1>USER</h1> <button id="getUsers">Get Users</button> <div id="users"></div>
在這種情況下,由於吊裝 ,變量聲明的順序很重要-將loadUsers
定義移到調用上方。
JavaScript僅提升聲明,而不提升初始化。 如果在使用變量后聲明並初始化了變量,則該值將是不確定的。
塊引號以上從MDN解釋了為什么他們被稱為(從頂部至底部讀碼) 后函數聲明可以被定義,但它們被使用之后將具有一個值,該值被初始化的變量undefined
。
const users = document.querySelector('#user'); const getUsers = document.getElementById('getUsers'); const loadUsers = () => { console.log('Load users..'); } getUsers.addEventListener('click', loadUsers);
<head> <meta charset="UTF-8"> <title>Testing AJAX</title> </head> <body> <h1>USER</h1> <button id="getUsers">Get Users</button> <div id="users"></div> </body>
或者,您可以將函數保留在底部,但是使用將被懸掛的函數聲明:
const users = document.querySelector('#user'); const getUsers = document.getElementById('getUsers'); getUsers.addEventListener('click', loadUsers); function loadUsers() { console.log('Load users..'); }
<head> <meta charset="UTF-8"> <title>Testing AJAX</title> </head> <body> <h1>USER</h1> <button id="getUsers">Get Users</button> <div id="users"></div> </body>
除了正確的答案之外,請查看下面重構的您的代碼。 希望這可以幫助。
// Get Elements const usersList = document.querySelector('#usersList'); const usersBtn = document.querySelector('#usersBtn'); // Bind listener to usersButton usersBtn.addEventListener('click', () => { // XHR Request function const xhr = new XMLHttpRequest(); xhr.open('GET','https://api.github.com/users') xhr.send() xhr.onload = function() { if (xhr.status == 200) { // Convert the response to JSON and assign it to data const data = JSON.parse(xhr.responseText) // Loop throug through data for(let i = 0; i <data.length; i++) { // Create LI element and append the user name const listItem = document.createElement('li'); usersList.appendChild(listItem).innerHTML = data[i].login } } } })
<h1>USERS</h1> <button id="usersBtn">Get Users</button> <ul id="usersList"></ul>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.