`

javascript:void(0)与# 我所遇到了问题

js 
阅读更多

刚好把项目的大体完善了。现在回想一下之前我所遇到的一些细节问题,特别是花费了我很多时间。(以下的例子在我的member.jsp和member.js)

一个是我对记录进行删除的时候,页面没有刷新 第二个是:我对于注销登录进行操作的时候,页面没有刷新(注明:注销登录在火狐,谷歌,ie8正常,但是在ie6失败).后来发现问题都与 javascript:void(0),#之间的区别有关。

于是我开始在网上搜索一番查看两者之间的区别:

"#"包含了一个位置信息 默认的锚点是#top 也就是网页的上端
<a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP(实际测试发现 滚动条会滚到顶端)
而javascript:void(0) 仅仅表示一个死链接,例如:<a href="javascript:void(0)" > 点击链接后,页面不动。
<a href="#" onclick="javascript:return false;"> 作用同上。
点击链接后,不想使页面滚到页首(顶部),就用href="javascript:void(0)",不要用href="#"
如果是个# ,就会出现跳到顶部的情况,收藏的几种解决方法(保持页面不会到顶端的方法):
1:<a href="####"></a>
2:<a href="javascript:void(0)"></a>
3:<a href="javascript:void(null)"></a>
4:<a href="#" onclick="return false"></a>

下面是我测试的一个例子:

<a href="#" onClick="del(${member.memberId});return false;"><img src="<%=ctxPath%>/image/admin/btn_delete.gif"/>删除</a> 注意这里面加了一句,作用在于 当弹出confirm对话框的时候 我单击取消的时候 页面不动,如果不加的话,单击取消操作,滚动条会向顶端滚动。

JavaScript中void(0)的含义:
JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。
void 操作符用法格式如下:
1. javascript:void (expression)
2. javascript:void expression
expression是一个要计算的 JavaScript 标准的表达式。表达式外侧的圆括号是可选的,但是写上去是一个好习惯。我们可以使用 void 操作符指定超级链接。表达式会被计算但是不会在当

前文档处装入任何内容。面的代码创建了一个超级链接,当用户点击以后不会发生任何事。当用户点击链接时,void(0) 计算为 0,但在 JavaScript 上没有任何效果。
<a href="javascript:void(0)">单击此处什么也不会发生</a>
也就是说,要执行某些处理,但是不整体刷新页面的情况下,可以使用void(0),但是在需要对页面进行refresh的情况下,那就要仔细了。 我们可以这样用<a href="javascript:void(document.form.submit())">,这句话会进行一次submit操作,使页面refresh。像我们一般的记录的修改,删除等等 需要页面相应的刷新!

我的例子:

<a href="javascript:void(document.mainForm.submit())" onClick="del(${member.memberId});"><img src="<%=ctxPath%>/image/admin/btn_delete.gif"/>删除</a>
这样一个document.mainForm.submit() 代替了 jsp页面中js文件的$("#mainForm").submit();使得页面刷新了。
那什么情况下用void(0)比较多呢,无刷新,当然是Ajax了,看一下Ajax的web页面的话,一般都会看到有很多的void(0),:),所以在使用void(0)之前,最好先想一想,这个页面是否需要

相应的刷新。

下面是我在网上搜索的一个与我注销登录遇到相似的问题,先看他的说法:

为什么location.href不自动跳转?慎用javascript:void(0)
<a href="javascript:void(0)" onclick="delete('123')">删除</a>
<script>
function delete(id) {
if(confirm("确实要删除[为什么location.href不自动跳转?]吗?")) {
location.href="/delete.jsp?id=" + id;
}
}
以上代码不管如何检查都没有任何问题,而location.href="/delete.jsp?id=" + id;在别的地方都好使,为什么这段代码就行呢?
原因是那个void(0),把代码改成:
<a href="javascript:delete('123')">删除</a>
<script>
function delete(id) {
if(confirm("确实要删除[为什么location.href不自动跳转?]吗?")) {
location.href="/delete.jsp?id=" + id;
}
}

我的注销登录最终的解决方法:

我的注销登录:
decorator.jsp
<li><a href="#" onClick="logout()">注销</a></li>
对应的js文件
function logout(){
if(confirm("确定要退出管理后台系统吗?"))
parent.window.location= ctxPath+"/console/logout.do";
}
可以成功注销登录。
按照上面的方法:
decorator.jsp
<li><a href="javascript:logout()">注销</a></li>
对应的js文件
function logout(){
if(confirm("确定要退出管理后台系统吗?"))
parent.window.location= ctxPath+"/console/logout.do";
}
也可以可以成功注销登录。
但是如果我的jsp页面换成<li><a href="javascript:void(0);" onClick="logout()">注销</a></li>
对应的js文件
function logout(){
if(confirm("确定要退出管理后台系统吗?"))
parent.window.location= ctxPath+"/console/logout.do";//这里我在在logoutAction中把session值清空 然后在struts中配置跳转的路径/login.jsp
}
注销失败,页面不能正常的跳转。必须再次刷新页面,才可以。

可以看出想要页面进行刷新 javascript:void(0)真的是慎用!

我的删除操作也是和上面一样 。源于javascript:void(0) 我的页面删除后 同样要对页面记录进行刷新!

改成了<a href="#" onClick="del(${member.memberId});"><img src="<%=ctxPath%>/image/admin/btn_delete.gif"/>删除</a>这样才可以。或者 <a href="javascript:void(document.mainForm.submit())" onClick="del(${member.memberId});"><img src="<%=ctxPath%>/image/admin/btn_delete.gif"/>删除</a>(这时把相应的js中的 $("#mainForm").submit();注释掉了)

效果达到额!

分享到:
评论

相关推荐

    JS动态加载以及JavaScriptvoid(0)的爬虫解决方案.docx

    JS动态加载以及JavaScriptvoid(0)的爬虫解决方案.docx

    flash 弹出窗口js 生成器

    遇到问题时在网上找的,很有用,于是传上来供大家使用,  flash 弹出窗口 js 生成器 原创 来自:x-woods.com 由于新版本IE的改变,所以要在生成的代码增加一void函数,写成 getURL("javascript:void(window.open....

    大名鼎鼎SWFUpload- Flash+JS 上传

    什么是SWFUpload?  SWFUpload是一个客户端文件上传工具...使用SWFUpload遇到的多数问题是由不正确地设置或者定义了糟糕的处理事件引起的。 初始化和设置 SWFpload必须在页面中初始化,一般可以在window.onload事件中...

    spring-boot-websocket-client:通过JavaScript和Java客户端演示Spring Boot Websocket + Stomp服务

    由于我在实现中遇到了一些麻烦,因此我创建了这个示例,因此您不必这样做。 介绍 对于我现在正在处理的峰值,我们希望让我们的移动客户端通过websockets与我们的后端通信。 最重要的是,我们想使用消息传递协议/...

    RedditCharCounter:在 Reddit 上创建新帖子时显示剩余的字符数

    RedditCharCounter 在 Reddit 上创建新帖子时显示剩余的字符数一些子版块(/politics、/... 使用 github 安装时遇到问题? 在浏览器中打开包含的 char.html 文件,这将使您能够从真实的 HTML 页面而不是 Github m

    网管教程 从入门到精通软件篇.txt

    除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  将指定的驱动器格式化为指定的文件系统。含有下列参数的 format 命令仅在使用故障恢复...

    foodmarklet:普通版本的书签版本

    它与更多网站兼容,因为出于安全原因,服务器版本需要将白名单添加到域中,而此书签不需要。 安装 将此书签您的书签栏: 右键单击书签,然后将URL更改为以下代码: [removed]void((()=&gt;{let js=document....

    IServ:nodeJS 的 IServ API

    如果您遇到问题,请创建 PR! 服务工具 种类:全局类许可证:麻省理工学院版本:0.2 作者:dunklesToast / Tom Sacher ⇒ Promise.&lt;void&gt; ⇒ Promise.&lt;Object&gt; ⇒ Promise.&lt;Object&gt; ⇒ Promise.&lt...

    千方百计笔试题大全

    202、用jdom解析xml文件时如何解决中文问题?如何解析? 48 203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 51 205、EJB与JAVA BEAN的区别? 51 206、EJB的基本...

    java面试宝典

    202、用jdom解析xml文件时如何解决中文问题?如何解析? 48 203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 51 205、EJB与JAVA BEAN的区别? 51 206、EJB的基本...

    utools-code-helper

    解决自己在写代码时遇到的一些小问题。 去除字符串拼接引号转义符等 使用场景 我们在用 Idea 编写Java字符串或者SQL时,可能会在代码中有一些转义符加号等,如果想把这段语句或SQL复制出来修改需要一个个的去除转义...

Global site tag (gtag.js) - Google Analytics