Javascript 如何在不刷新页面的情况下按enter键?

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

我目前正在从事一个wiki搜索项目,我遇到了一个问题,我无法在stackoverflow上找到答案。我试图在按下enter键时执行一个XMLHttp请求,但一直无法让它工作。它总是刷新页面,即使我尝试了keyup、keydown、submit和bind方法

HTML代码:

         <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;
    });