diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 9869c50fbb0cf..6169d5ce8e85c 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -81,6 +81,7 @@ function getSearchElement() {
var disableShortcuts = getCurrentValue("rustdoc-disable-shortcuts") === "true";
var search_input = getSearchInput();
+ var searchTimeout = null;
// On the search screen, so you remain on the last tab you opened.
//
@@ -91,6 +92,13 @@ function getSearchElement() {
var titleBeforeSearch = document.title;
+ function clearInputTimeout() {
+ if (searchTimeout !== null) {
+ clearTimeout(searchTimeout);
+ searchTimeout = null;
+ }
+ }
+
function getPageId() {
var id = document.location.href.split("#")[1];
if (id) {
@@ -344,6 +352,7 @@ function getSearchElement() {
if (hasClass(help, "hidden") === false) {
displayHelp(false, ev, help);
} else if (hasClass(search, "hidden") === false) {
+ clearInputTimeout();
ev.preventDefault();
hideSearchResults(search);
document.title = titleBeforeSearch;
@@ -1799,9 +1808,8 @@ function getSearchElement() {
}
function startSearch() {
- var searchTimeout;
var callback = function() {
- clearTimeout(searchTimeout);
+ clearInputTimeout();
if (search_input.value.length === 0) {
if (browserSupportsHistoryApi()) {
history.replaceState("", window.currentCrate + " - Rust", "?search=");
@@ -1815,7 +1823,7 @@ function getSearchElement() {
search_input.oninput = callback;
document.getElementsByClassName("search-form")[0].onsubmit = function(e) {
e.preventDefault();
- clearTimeout(searchTimeout);
+ clearInputTimeout();
search();
};
search_input.onchange = function(e) {
@@ -1824,7 +1832,7 @@ function getSearchElement() {
return;
}
// Do NOT e.preventDefault() here. It will prevent pasting.
- clearTimeout(searchTimeout);
+ clearInputTimeout();
// zero-timeout necessary here because at the time of event handler execution the
// pasted content is not in the input field yet. Shouldn’t make any difference for
// change, though.