jquery实现form表单提交后局部刷新页面的多种方法

最近做一个小项目,刚好需要用到搜索功能,实现搜索框内输入数据然后按回车或者点击“提交”,然后给后台数据库处理并返回数据给前端,在前端局部更新数据。

比如这样的:
但是遇到了一个小问题,就是form表单下任意输入框输入完按回车提交,整个页面都会刷新,就算我用ajax从后台取出数据返回前端把页面更新了,整个页面还是会立马刷新成原来的样子。

所以问题又回到了最开始,就是form表单如何实现按回车提交数据处理但不刷新整个页面。
问题和ajax其实并没有太大关系。是js部分要进行一定的转换。

测试代码(包含jquery静态库,有网络的同学都不用引入jquery库,可以直接写进html页面看效果):

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">

$(document).ready(function (){

$("#form1").submit(function () {
$("#show").text("444");
});
$("#form2").submit(function () {
$("#show").text("777");
//中间可以做一些ajax数据交互,让"777"为后台返回的值
return false;
});
$("#btn").click(function () {
$("#show").text("555");
});
$("#num3").keydown(function(e){ //按下键盘触发函数
if(e.keyCode==13){ //如果按下的是回车
$("#show").text("666"); //处理事件
}
});
})

</script>

</head>
<body>

<form id="form1">
表单一:<input type="text">
<input type="submit" value="在左侧输入框按回车或点击此按钮,可以看到文本值333一闪而过为444又回到333">
</form>

<form id="form2">
表单二:<input type="text">
<input type="submit" value="在左侧输入框按回车或点击此按钮,可以看到文本值333改为777不变回去">
</form>

独立输入框(按回车更新文本为666):<input type="text" id="num3">
<br>

<button id="btn">点击更改文本值为555</button>
<span id="show">333</span>

</body>
</html>

界面:

很简单的一个测试代码,看一下就知道这些方法了。

首先form不能有action跳转,有action跳转是肯定会更新或者跳转到其他页面的

方法一:给form表单写一个submit函数,在最后加一句 return false; //感觉这篇文章看的人还是蛮多的,特地回来加粗一下,这个方法可以解决大部分情况了。
(我的例子里演示了加与不加的区别,如果不加return false;同时用submit函数处理,那么整个页面还是会立马刷新,数据改变只是一闪而过)

方法二:不用<input type="submit">的方式,改为设置一个button按钮,让用户通过手动点击按钮来实现数据更改。
(这个方法比较不符实际应用,毕竟用户的搜索习惯都是直接按回车。手要拿到鼠标上点击一个按钮费时费力。

方法三:脱离表单,设置一个独立的输入框<input>,给这个输入框设置回车触发事件。(回车的键盘值为13)
(这个方法也是可行的,实际项目中可以用<div>或者<li>把<input>输入框组给包含起来,给每个<input>设置按下回车的触发事件,同时提交按钮也要设置相同的事件。然而输入框多了的话比较麻烦,毕竟表单还是表单,是要用回车键处理的)


以上就是三种不同的解决办法,大家根据自己实际项目中的应用来选择。
此问题归根结底与ajax并没有直接关系,ajax只是前后端交互的一种手段,最后还是要通过前端来实现数据部分更新的。这个问题是前端的问题。

我觉得我也是太钻牛角尖了,如果不用form或者直接让用户按一个按钮提交搜索内容不是很轻松就能实现了吗。我非要实现“按回车即可直接搜索”这个功能,好像太刻板了。。。
有时候,让使用者麻烦一点还能增加在你的网站的滞留时间,不是吗?哈哈

原文地址:https://www.cnblogs.com/dhx96/p/6795057.html