【转载】[JS]让表单提交返回后保持在原来提交的位置上
有时候,在网页中点击了页面中的按钮或是刷新了页面后,页面滚动条又 会回到顶部,想看后面的记录就又要拖动滚动条,或者要按翻页键,非常不方便,想在提交页面或者在页面刷新的时候仍然保持滚动条的位置不变,最好的办法就是 在JS中用cookie记录下当前滚动条的位置,然后刷新时读取cookie就可以实现这个功能了。
代码如下:
<script type="text/javascript">
function Trim(strValue)
{
//return strValue.replace(/^s*|s*$/g,"");
return strValue;
}
function SetCookie(sName,sValue)
{
document.cookie = sName + "=" + escape(sValue);
}
function GetCookie(sName)
{
var aCookie = document.cookie.split(";");
for(var i=0; i < aCookie.length; i++)
{
var aCrumb = aCookie[i].split("=");
if(sName == Trim(aCrumb[0]))
{
return unescape(aCrumb[1]);
}
}
return null;
}
function scrollback()
{
if(GetCookie("scroll")!=null){document.body.scrollTop=GetCookie("scroll")}
}
</script>
然后在html页面中设置<body id=body onscroll=SetCookie("scroll",document.body.scrollTop); onload="scrollback();">就可以在刷新或提交后滚动条的位置保持不变了。
如果不好用,这里修改下:document.body.scrollTop修改为document.documentElement.scrollTop
当你用asp.net开发web页面时,你会发现,如果你设置了一个页面,如果里面含有多个Button,而且页面很长。
当你点击Button后PostBack时,页面总是显示在最上面,极其不方便。
但下面这段代码,写帮你解决这个问题。
<input type="hidden" id="Window_OffsetY" name="Window_OffsetY" value="0">
<input type="hidden" id="Window_OffsetX" name="Window_OffsetX" value="0">
<script language="Javascript">
var ua = navigator.userAgent.toLowerCase();
var isIE = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) );
function Window_OnSubmitIE(){
document.getElementById("Window_OffsetY").value = window.event.offsetY - window.event.clientY + 2;
document.getElementById("Window_OffsetX").value = window.event.offsetX - window.event.clientX + 2 ;
}
function Window_OnSubmitNS(event){
document.getElementById("Window_OffsetY").value = event.pageY - event.clientY;
document.getElementById("Window_OffsetX").value = event.pageX - event.clientX;
}
if (!isIE){
document.forms[0].addEventListener('submit',Window_OnSubmitNS, false);
}
else{
document.forms[0].attachEvent('onsubmit',Window_OnSubmitIE);
}
function Lili1_OnLoad(){
window.scrollTo(0,1431);
}
if (!isIE){
window.addEventListener('load',Lili1_OnLoad, false);
}
else{
window.attachEvent('onload',Lili1_OnLoad);
}
</script>
最近写了一个拖动层的HTML页面, 需要获取滚动条当前的位置.
于是我使用document.body.scrolltop获取y方向滚动的位置...奇怪的事情出现了! 无论滚动条怎么滚动,document.body.scrolltop竟然一直都是0!
对比以前写的一个页面.发现区别很小. 旧页面却没有问题.这就怪了...
我开始一点一点的排除,去掉多于的代码. 直到我去掉文档最顶部的
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">页面此时才正常.
原来是这行东西造成IE无法获取document.body.scrolltop!
把顶部这两行删掉将可以了.但是为什么会这样呢?
google一下,发现改成:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">就可以了,但页面稍有变化,感觉不爽,于是又在google里找,终于解决:
var scrollPos;
if (typeof window.pageYOffset != 'undefined')
{
scrollPos = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat')
{
scrollPos = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined')
{
scrollPos = document.body.scrollTop;
}
alert(scrollPos);

document.body.scrollTop
要改成
document.documentElement.scrollTop
关于js中 document.body.scrollTop 不能返回正确值的原因
本来是为了通过document.body.scrollTop来获取浏览器垂直滚动条向下滚动的像素,但是不管滚动条在什么位置总是返回是0,造成这样的原因和html的头部声明有关,如果头部声明 为:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">,这样肯定得到的结果是 0,如果该为<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">就能得到正确的结果,对于第一种头部声明想要得滚动条的滚动的高度怎么办,解决方法有两种
1、var scrollPos;
if (typeof window.pageYOffset != 'undefined') {
scrollPos = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined') {
scrollPos = document.body.scrollTop;
}
2、用document.documentElement.scrollTop 替代 document.body.scrollTop
JS控制form表单提交的位置
<script language = "JavaScript">
function CheckForm()
{
if (document.myform.keytext.value == "") {
alert("查询关键字没有填写!\n\n请检查!");
document.myform.keytext.focus();
return false;
}
if (document.myform.cl.value == 1)
{
document.myform.action="yqjsj.asp?keytext="+myform.keytext.value;
document.myform.submit();
}
else if (document.myform.cl.value == 2)
{
document.myform.action="sjzz.asp?keytext="+myform.keytext.value;
document.myform.submit();
}
else if (document.myform.cl.value == 3)
{
document.myform.action="gjhc.asp?keytext="+myform.keytext.value;
document.myform.submit();
}
else if (document.myform.cl.value == 4)
{
document.myform.action="jyjqr.asp?keytext="+myform.keytext.value;
document.myform.submit();
}
}
</script>
var oFix = document.getElementById("divfix");
oFix.style.top = document.documentElement.scrollTop + "px";
【转载】[JS]让表单提交返回后保持在原来提交的位置上的更多相关文章
- Vue.js:表单
ylbtech-Vue.js:表单 1.返回顶部 1. Vue.js 表单 这节我们为大家介绍 Vue.js 表单上的应用. 你可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-mo ...
- jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).
Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.引入依赖js <script src=& ...
- jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因
jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因 今天利用了jquery.validate.js来验证表单,发现在火狐.谷歌浏览器当中都可以进行验证,但是在IE系列浏 ...
- JS 更改表单的提交时间和Input file的样式
JS转换时间 function renderTime(data) { var da = eval('new ' + data.replace('/', '', 'g').replace('/', '' ...
- jquery.form.js 让表单提交更优雅
jquery.form.js 让表单提交更优雅.可以页面不刷新提交表单,比jQuery的ajax提交要功能强大. 1.引入 <script src="/src/jquery-1.9.1 ...
- ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
- Form表单利用Jquery Validate验证以及ajax提交
#表单利用Jquery验证验证以及ajax提交 概述>详细讲解表单利用Jquery >验证验证以及ajax提交的过程,以及Validate的自定义提示语,非空判断,输入字段的远程ajax验 ...
- js动态控制表单表格
js动态控制表单表格,这里操作只讲,添加一行,删除一行,删除某一行某一列. 直接放代码: <!DOCTYPE html> <html> <head> <met ...
- Ladda 应用提交表单的时候显示loading载入中 包含不同位置,不同效果
Ladda 应用提交表单的时候显示loading载入中 包含不同位置,不同效果 不同大小.位置,效果,进度条等 演示 XML/HTML Code <article class="exa ...
随机推荐
- 【Android】EventBus 源码解析
EventBus 源码解析 本文为 Android 开源项目实现原理解析 中 EventBus 部分项目地址:EventBus,分析的版本:ccc2771,Demo 地址:EventBus Demo分 ...
- atitit.表格的绑定client side 最佳实践
atitit.表格的绑定client side 最佳实践 1. 框架选型 1 2. #---原理和流程 1 1. 方法1 1 2. Dwr 例子 1 3. 方法2 2 4. Jq例如 2 1. 框架选 ...
- paip.hibernate save 失败的解决
paip.hibernate save 失败的解决 打开log debug level,,看不见insert 代码... Hibernate select max(ID).txt ...
- phpstorm的安装和破解
1.什么是phpstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.但是phpstorm是商业软件, ...
- 18数据表&E-R模型&概念数据模型-下(选学)-天轰穿大话数据库视频教程
关键字:数据表 三大范式 外键 主键 数据表设计 天轰穿 sqlserver 数据库大纲:属性与主键,外键&联系,三大范式,设计表时应该考虑的因素 土豆超清地址: 优酷超清地址: 原文地址:h ...
- MongoDB图形化管理工具
NoSQL的运动不止,MongoDB 作为其中的主力军发展迅猛,也带起了一股开发图形化工具的风潮:气死反过来说,看一个产品是否得到认可,可以侧面看其第三方工具的数量和成熟程度:简单的收集了MongoD ...
- 【转】兼容iOS 10 资料整理
1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- BabeLua
http://cn.cocos2d-x.org/tutorial/show?id=507 command : -workdir E:\xg_svn\client\cocos2d-x-2.2.2\pro ...
- ubuntu下安装Node.js(源码安装)
最近使用hexo的过程中出现了问题,中间载nodejs安装的时候也耽误了些许时间,所以在此记录一下安装的过程. 环境:ubuntu14.0.4LTS,安装nodejs版本node-v0.10.36.t ...