Javascript 如何在不刷新页面的情况下按enter键?
我目前正在从事一个wiki搜索项目,我遇到了一个问题,我无法在stackoverflow上找到答案。我试图在按下enter键时执行一个XMLHttp请求,但一直无法让它工作。它总是刷新页面,即使我尝试了keyup、keydown、submit和bind方法 HTML代码:Javascript 如何在不刷新页面的情况下按enter键?,javascript,jquery,html,Javascript,Jquery,Html,我目前正在从事一个wiki搜索项目,我遇到了一个问题,我无法在stackoverflow上找到答案。我试图在按下enter键时执行一个XMLHttp请求,但一直无法让它工作。它总是刷新页面,即使我尝试了keyup、keydown、submit和bind方法 HTML代码: <form class="form-search ngen-search-form" action="" method "get"> <input type="text"n
<form class="form-search ngen-search-form" action="" method "get">
<input type="text"name="q"id = "search-input"class="form-search
input"placeholder="Search keywords..."dir="ltr">
<span class="glyphicon glyphicon-search form-search-submit"
id="search-trigger"aria-hidden="true"></span>
</form>
使用e.preventDefault()
防止页面刷新
$("#search-input").keyup(function (e) {
if(e.keyCode==13){
e.preventDefault();
console.log('works');
send();
}
});
这是因为您的
表单
正在被提交。使用下面的代码来防止它
$("form").submit(function(e){
e.preventDefault();
});
$(文档).ready(函数(){
//单击“搜索”按钮可展开搜索栏
$(“#搜索触发器”)。在('click',函数(e)上{
e、 预防默认值();
if(!$(“#搜索输入”).hasClass(“搜索输入打开”)){
$(“#搜索输入”).addClass('search-input-open');
}否则{
send();
}
});
$(“表格”)。提交(功能(e){
e、 预防默认值();
});
//--这里的问题是--enter按钮刷新页面,而不是执行js
$(“#搜索输入”).keyup(函数(e){
如果(e.keyCode==13){
console.log('works');
send();
}
});
//单击“远离搜索窗体”可关闭搜索栏
$(文档)。在('单击')上,函数(e){
e、 预防默认值();
if(!$(e.target).is('search trigger')&&(!$(e.target).is('search input')){
$(“#搜索输入”).removeClass('search-input-open');
}
});
//WikipediaAPI的请求函数
函数send(){
var xhr=new XMLHttpRequest();
//如果未输入任何内容,则添加预防措施
var searchTerm=document.getElementById('search-input')。值;
变量字符串=”https://en.wikipedia.org/w/api.php?action=opensearch&origin=*&search=“+searchTerm+”&formatversion=2&format=json”;
xhr.open('GET',string);
xhr.onload=函数(){
$(“#结果”).text(xhr.responseText);
};
xhr.send();
}
});代码>
您可以通过以下方式禁用Enter键
通过使用html属性
<form ... onkeypress="return event.keyCode != 13;">
也许表格正在提交?尝试在表单的onsubmit事件上返回false。我认为您需要将e.preventDefault()
放在console.log()
之前的keyup
事件处理程序中。问题是表单正在提交。您的问题实际上是重复的,有关详细信息,请参阅此问题:我建议您应该查看event.preventDefault()
和event.stopPropagation()
,以便将来开发。这真的很有帮助。
<form ... onkeypress="return event.keyCode != 13;">
$(document).on("keypress", "form", function(event) {
return event.keyCode != 13;
});