我试图调试我在codepen上的一个小程序,而且我对程序的顺序有问题。如果您显示控制台,您将看到该程序正在执行的步骤。
在第二次,第三次......搜索后,程序不会按照应该执行的步骤进行操作。我将不胜感激。
请在codepen上运行代码,因为它不会在stackoverflow的代码片段上以相同的方式运行。
http://codepen.io/rafahuelin/pen/JEdqOa?editors=0011
$( document ).ready(function() {
//1 Appears the magnifier icon
console.log("1");
$("#created").addClass("created-start");
$("#search").html("<div id='magnifier' class='search-init animated fadeIn'> <div id='magnifier-stick' class='stick-appears'></div> </div>");
//2 When clicking on the icon appears the input form
console.log("2");
$("#magnifier").on("click", function() {
$("#magnifier-stick").addClass("animated fadeOut stick-disappears").removeClass("stick-appears");
$(".search-init").addClass("search-input").removeClass("search-init");
setTimeout(function() { //waits for 1s
readyToSearch();
}, 1000);
});
//3/9 input area prepared to search
function readyToSearch() {
console.log("3/9");
$("#search").html("<div class='search-input'><form><input id='input-form' class='animated fadeIn' type='text' name='searchContent' placeholder='Type Your Search Here...'></form></div>");
$("#input-form").prop('disabled', false); //trying to debug *******************************
$("#input-form").focus();
//4 After pressing Enter,
$("#search").on("submit", function(e) {
console.log("4");
var searchText = $("#input-form").val(); //<---JQuery /// var searchText = document.getElementById("input-form").value; <---In javascript
$("#input-form").prop('disabled', true); //Disable textbox to prevent multiple submit // trying to debug *****************************************
moveSearchUp(searchText);
sendToAPI(searchText);
return false;
});
} // input area prepared to search
//6 send request to API
function sendToAPI(searchText) {
console.log("6");
var searchRequest = "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=" + searchText + "&namespace=&limit=10&callback=?";
var tmp = $.ajax({
url: searchRequest,
type: "GET",
async: false,
dataType: "json",
success: function (data, status, jqXHR) {
showList( data );
console.log("6 searchRequest: " + searchRequest);
console.log("6 searchText: " + searchText);
console.log("6 data[1]: " + data[1] );
},
error: function (errorMessage) {
console.log(errorMessage);
}
});
}
//7 show the results
function showList (data) {
console.log("7");
$("#results").addClass("results").html("<ul>");
for (i = 0; i < data[1].length; i++) {
$("#results").append("<div class='result-item'><a href='" + data[3][i] + "' target='blank_'><li> <h2 class='title'>" + data[1][i] + "</h2><p class='description'>" + data[2][i] + "</p></li></a></div>");
if(i != data[1].length - 1){
$("#results").append("<hr>")
}
}
$("#results").append("</ul>");
//8 click on the close X
$("#close").on("click", function() {
console.log("8");
$("#results").remove();
$("#created").addClass("created-start");
readyToSearch();
});
}
//5 search-input moves up
function moveSearchUp(searchText) {
console.log("5");
$("#created").removeClass("created-start");
$(".search-input").removeClass("search-input").addClass("search-top");
setTimeout(function() { //waits for 1s
$("#input-form").css({'width': searchText.length * 12 + 'px'});
}, 500);
if ($("#close > i").hasClass("fa-times") === false) {
$("form").append("<div id='close'><i class='fa fa-times' aria-hidden='true'></i></div>");
}
if ($("#created").hasClass("created-start") === false) {
$("#created").addClass("created-start");
}
} // end function moveSearchUp
}); // $(document).ready
&#13;
.search-init {
height: 70px;
width: 70px;
border: 4px solid rgba(185, 18, 27, 1);
border-radius: 35px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
position: absolute;
-webkit-animation-duration: 3s;
-ms-animation-duration: 3s;
-moz-animation-duration: 3s;
}
#magnifier-stick.stick-appears {
height: 20px;
width: 0;
border: 2px solid rgba(185, 18, 27, 1);
transform: rotate(-45deg);
top: 54px;
left: 54px;
position: absolute;
transition: all 0.2s ease;
}
#magnifier-stick.stick-disappears {
height: 0;
width: 0;
border: 2px solid rgba(185, 18, 27, 1);
transform: rotate(-95deg);
top: 54px;
left: 54px;
position: absolute;
transition: all 200ms ease;
-webkit-animation-duration: 0.2s;
-ms-animation-duration: 0.2s;
-moz-animation-duration: 0.2s;
}
#input-form, #input-form:focus {
width: 100%;
min-width: 120px;
border-radius: 35px;
outline: none;
border: none;
padding-left: 20px;
padding-right: 20px;
transition: all 500ms 500ms ease;
background-color: rgba(255,255,255,0);
}
.search-input{
line-height: 56px;
height: 70px;
width: 570px;
border: 4px solid rgba(185, 18, 27, 1);
border-radius: 35px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
position: absolute;
transition: all 500ms 500ms ease;
background-color: rgba(255,255,255,0);
}
/* Change the background color of the input */
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0px 1000px #F6E497 inset;
}
.search-top {
line-height: 40px;
height: 54px;
border: 4px solid rgba(185, 18, 27, 1);
border-radius: 27px;
top: 0;
left: 50%;
transform: translate(-50%, 0);
position: absolute;
transition: all 500ms 500ms ease;
}
input:-webkit-autofill{
background: none;
}
.results {
margin-left: auto;
margin-right: auto;
margin-top: 90px;
padding: 30px;
list-style: none;
letter-spacing: 2px;
}
.results a:hover {
text-decoration: none;
}
.result-item {
border-left: solid 7px rgba(185, 18, 27, 0);
margin-bottom: 15px;
padding: 15px;
}
.result-item:hover {
border-left: solid 7px rgba(185, 18, 27, 1);
transition: all ease 0.8s;
padding: 15px;
background-color: rgba(255,255,255,0.05);
}
.title {
font-size: 2.5rem;
font-weight: 500;
margin-top: 0;
color: #4C1B1B;
}
.description {
margin-bottom: 0;
color: #BD8D46;
}
hr {
border: 0;
height: 2px;
background-image: linear-gradient(to right, rgba(185, 18, 27, 0), rgba(185, 18, 27, 0.45), rgba(185, 18, 27, 0));
}
.created {
text-align: center;
margin: 40px;
font-size: 2.4rem;
letter-spacing: 2px;
text-decoration: none;
font-style: italic;
color: #B9121B;
}
.created-start {
position: absolute;
bottom: 45px;
left: 50%;
transform: translatex(-60%);
margin-bottom: 0;
}
.created a {
color: #B9121B;
font-size: 3.5rem;
text-decoration: none;
}
.name {
font-size: 2rem;
}
.created a:hover, .created a:visited {
color: #B9121B;
text-decoration: none;
}
/* .delete-search::after {
content: "<div id='close'><i class="fa fa-times" aria-hidden="true"></i></div>";
} */
#close {
float: right;
display: inline-block;
padding: 2px 10px;
background: none;
color: #B9121B;
font-size: 20px;
font-weight: 100;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="search">
</div>
<div id="results">
</div>
<footer>
<div id="created" class="created">
<span class="by">— </span> <a target="_blank" href="https://github.com/rafahuelin/"><span class="name">Rafa Huelin</span> <i class="fa fa-github" aria-hidden="true"></i></a> <span class="by"> —</span>
</div>
</footer>
</body>
</html>
&#13;
答案 0 :(得分:2)
问题在于,每次调用 readyToSearch 函数时,都会绑定提交事件。 当您每次单击关闭按钮时调用 readyToSearch ,将再次绑定提交。
如果您将提交事件绑定移出 readyToSearch 函数,它将按预期工作。
$( document ).ready(function() {
//1 Appears the magnifier icon
console.log("1");
$("#created").addClass("created-start");
$("#search").html("<div id='magnifier' class='search-init animated fadeIn'> <div id='magnifier-stick' class='stick-appears'></div> </div>");
//4 After pressing Enter,
$("#search").on("submit", function(e) {
console.log("4");
var searchText = $("#input-form").val(); //<---JQuery /// var searchText = document.getElementById("input-form").value; <---In javascript
$("#input-form").prop('disabled', true); //Disable textbox to prevent multiple submit // trying to debug *****************************************
moveSearchUp(searchText);
sendToAPI(searchText);
return false;
});
//2 When clicking on the icon appears the input form
console.log("2");
$("#magnifier").on("click", function() {
$("#magnifier-stick").addClass("animated fadeOut stick-disappears").removeClass("stick-appears");
$(".search-init").addClass("search-input").removeClass("search-init");
setTimeout(function() { //waits for 1s
readyToSearch();
}, 1000);
});
//3/9 input area prepared to search
function readyToSearch() {
console.log("3/9");
$("#search").html("<div class='search-input'><form><input id='input-form' class='animated fadeIn' type='text' name='searchContent' placeholder='Type Your Search Here...'></form></div>");
$("#input-form").prop('disabled', false); //trying to debug *******************************
$("#input-form").focus();
} // input area prepared to search
//6 send request to API
function sendToAPI(searchText) {
console.log("6");
var searchRequest = "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=" + searchText + "&namespace=&limit=10&callback=?";
var tmp = $.ajax({
url: searchRequest,
type: "GET",
async: false,
dataType: "json",
success: function (data, status, jqXHR) {
showList( data );
console.log("6 searchRequest: " + searchRequest);
console.log("6 searchText: " + searchText);
console.log("6 data[1]: " + data[1] );
},
error: function (errorMessage) {
console.log(errorMessage);
}
});
}
//7 show the results
function showList (data) {
console.log("7");
$("#results").addClass("results").html("<ul>");
for (i = 0; i < data[1].length; i++) {
$("#results").append("<div class='result-item'><a href='" + data[3][i] + "' target='blank_'><li> <h2 class='title'>" + data[1][i] + "</h2><p class='description'>" + data[2][i] + "</p></li></a></div>");
if(i != data[1].length - 1){
$("#results").append("<hr>")
}
}
$("#results").append("</ul>");
//8 click on the close X
$("#close").on("click", function() {
console.log("8");
$("#results").remove();
$("#created").addClass("created-start");
readyToSearch();
});
}
//5 search-input moves up
function moveSearchUp(searchText) {
console.log("5");
$("#created").removeClass("created-start");
$(".search-input").removeClass("search-input").addClass("search-top");
setTimeout(function() { //waits for 1s
$("#input-form").css({'width': searchText.length * 12 + 'px'});
}, 500);
if ($("#close > i").hasClass("fa-times") === false) {
$("form").append("<div id='close'><i class='fa fa-times' aria-hidden='true'></i></div>");
}
if ($("#created").hasClass("created-start") === false) {
$("#created").addClass("created-start");
}
} // end function moveSearchUp
}); // $(document).ready