我正在研究freecodecamp的維基百科查看器項目。我有一個工作的例子,但有幾件事我不知道該怎麼做。如何將點擊和keydown綁定到Vanilla的輸入字段JavaScript
首先,我該如何執行一些AJAX請求,方法是在輸入字段中輸入內容並按下回車鍵或點擊按鈕?
接下來,當我嘗試在輸入字段中輸入並按Enter時,結果顯示在網頁中。但是,當我嘗試輸入並再次輸入時,新結果不顯示,但之前的結果消失,我必須再次輸入並再次按Enter才能獲得新結果。
我知道那裏使用jQuery的其他職位,我也不明白,不想在普通的JavaScript中使用jQuery。
var url = 'https://en.wikipedia.org/w/api.php?action=opensearch&datatype=json&limit=10&origin=*&search=';
var inputSearch = document.myForm.search;
var searchBtn = document.myForm.searchBtn;
var list = document.getElementById("list");
var random = document.getElementsByClassName('random')[0];
random.addEventListener("click" , function(){
window.open("https://en.wikipedia.org/wiki/Special:Random");
});
function requestData (e) {
var inputStr = e.target.value;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
var dataObj = JSON.parse(request.responseText);
var titles = dataObj[1];
var descriptions = dataObj[2];
var links = dataObj[3];
document.myForm.innerHTML += "<h2><span>" + links.length + "</span> results for \"" + "<span>" + inputStr + "</span>" +"\" </h2>";
list.innerHTML = "";
for (var i = 0; i < titles.length; i++) {
var li = "<li><a target='_blank' href=" + links[i] + ">" + titles[i] + "</a></li>";
list.innerHTML += li;
}
}
else {
console.log("Server responded with following error code : " + request.status);
}
}
};
if (e.keyCode === 13) {
console.log(e.type);
request.open("GET" , url + inputStr);
request.send(null);
e.preventDefault();
}
}
inputSearch.addEventListener("keydown" , requestData);
searchBtn.addEventListener("click" , requestData);
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
\t margin: 0;
\t padding: 0;
\t border: 0;
\t font-size: 100%;
\t font: inherit;
\t vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
\t display: block;
}
body {
\t line-height: 1;
}
ol, ul {
\t list-style: none;
}
blockquote, q {
\t quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
\t content: '';
\t content: none;
}
table {
\t border-collapse: collapse;
\t border-spacing: 0;
}
/* CSS reset ends here */
body {
\t font-size: 16px;
\t font-family: 'Oxygen', sans-serif;
\t
}
.container-wrapper {
\t margin: 0 auto;
\t text-align: center;
\t height: 100vh;
}
header {
\t /*background-color: #fc3e5b;*/
\t padding: 80px 0;
}
header h1 {
\t font-family: 'Anton', sans-serif;
\t font-size: 70px;
\t padding: 30px 0 80px 0;
\t color: #fc3e5b;
}
form input , form button {
\t padding: 10px 8px;
\t font-size: 22px;
\t border: 1px solid #fc3e5b;
\t outline: 0;
\t display: inline;
\t margin: 0;
}
form button {
\t background-color: #fc3e5b;
\t color: #fff;
}
h2 {
\t font-size: 25px;
\t margin-top: 32px;
}
h2 span {
\t font-weight:bold;
\t color: #fc3e5b;
}
.random {
\t padding: 22px 7px;
\t border-radius: 100%;
\t margin: 20px 0 15px 0;
}
.random:hover {
\t border: 5px solid #fc3e6b;
}
#list {
\t width: 75%;
\t margin: 0 auto;
}
#list li {
\t padding: 16px 8px;
\t background-color: #fc3e5b;
\t margin: 12px 0;
\t text-align: left;
\t font-size: 22px;
}
#list li a {
\t text-decoration: none;
\t color: #fff;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title> Wikipedia Viewer </title>
<link href="https://fonts.googleapis.com/css?family=Anton|Oxygen" rel="stylesheet">
<link rel="stylesheet" href="wikipedia.css">
</head>
<body>
<div class="container-wrapper">
\t <header>
\t <h1> Wikipedia Viewer </h1>
\t <form action="" name="myForm">
\t \t <input type="text" name="search" /><button name="searchBtn">Search</button>
\t \t <br>
\t \t <button name="btnRandom" class="random"> Random<br>Article </button>
\t </form>
\t </header>
\t
\t <div class="container">
\t <ul id="list"></ul>
\t </div>
</div>
<script src="wikipedia.js"></script>
</body>
</html>
是您的腳本從服務器返回什麼? –
是的,我得到了我正在渲染到頁面中的響應json。它只是我在帖子中提到的問題。 – knight