原文地址: JavaScript Redirects and window.open
原文日期: 2014年08月27日
翻译日期: 2014年08月31日
翻译人员: 铁锚

(译者注: 本文解决的是按 Ctrl键时使用JS打开新页面的问题)

在简化的HTML5规范中,同意在 A 标签内包括多个 DIV 和/或其它块级元素. 如今仅仅要用 <a> 标签包住块元素,就能搞定原来须要用JavaScript来监听并调用 window.location 实现页面跳转(redirect)功能.
但使用<a>标签的这样的包装形式也有不好使的情况 —— 比如,某个块元素(block)内另一些 <a> 标签, 这样的情况下我们仅仅想在点击parent中<a>以外的其它部分时才跳转到一个给定的地址。

当然,像以下这样用一个简单的listener 也能实现我们的需求:

someElement.addEventListener('click', function(e) {
// URL地址是什么都行,或者你也能够使用其它的代码来指定.
// 此处用的是该元素的 `data-src` DOM属性(attribute)
window.location = someElement.get('data-url');
});

…但这有时会有非常糟的用户体验, 当按住CTRL键(Mac是COMMAND键),再用鼠标点击时,它会在同一个(标签页)窗体内打开链接。

知道有这个问题,你肯定想到了该怎样去解决.我们改动一小点代码就能达成这个目的,赶快花点时间去修复你的listener吧:

someElement.addEventListener('click', function(e) {
// 获取URL
var url = someElement.get('data-url');
// 推断是否按下了CTRL键
if(e.metaKey || e.ctrlKey || e.button === 1) {
window.open(url);
} else {
window.location = url;
}
});

原文作者已经在 http://davidwalsh.name/ 站点上实现了这个功能,在使用window.location进行页面重定向时你也应该记得这一点。这是一个非常小的代码改进,但对可用性的提高却是非常重要的!

完好用户体验: 活用window.location与window.open解决页面跳转问题的更多相关文章

  1. window.location.hash(hash应用)---跳转到hash值制定的具体页面

    location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url.而location. ...

  2. window.location 与window.open区别

    window.location 与window.open区别 1.window.location是window对象的属性,而window.open是window对象的方法   window.locat ...

  3. window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应

    错误写法 , 主要是在 href="#"这里 <a href="#" id="send" onclick="return b ...

  4. window.location和window.open

    window.location和window.open的区别 window.location = "http://www.baidu.com" 跳转后有后退功能 window.lo ...

  5. window.location和window.open的区别

    window.location = "http://www.baidu.com" 跳转后有后退功能 window.location.replace("http://www ...

  6. window.location.href = window.location.href window.location.reload()

    w 0-会议预订提交了预订日期,预订成功后默认显示仅显示当前日期的新页面若显示预定日的信息,则可以对预定日存入cookie: http://stackoverflow.com/questions/24 ...

  7. window.location与window.open()的区别

    "top.location.href"是最外层的页面跳转"window.location.href"."location.href"是本页面 ...

  8. window.location和window.location.href和document.location的关系

    1,首先来区分window.location和window.location.href. window.location.href是一个字符串. 而window.location是一个对象,包含属性有 ...

  9. js 中实现页面跳转的方法(window.location和window.open的区别)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

随机推荐

  1. Java学习路线-基础篇!

    下面以黑马程序员Java学院的学习路线为例,进行一次史无前例的剖析,我会采取连载的形式,细致的讲解零基础的人怎么学习Java.先看下Java在基础阶段的知识点路线图. 内容多吗?不要被吓到了,知识点剖 ...

  2. 【HDOJ5973】Game of Taking Stones(Java,威佐夫博弈)

    思路:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完 ...

  3. Html.AntiForgeryToken 防止伪造提交

    原文发布时间为:2011-05-03 -- 来源于本人的百度文章 [由搬家工具导入] In this tutorial, I am not going to discuss the concept i ...

  4. spring一些总结

    Spring中三种实例化bean的方法: 1)使用类构造器   <bean id="orderService" class="cn.itcast.OrderServ ...

  5. ios开发某个页面横不过来屏幕的时候

    某一个页面需要横屏,其他的页面任然保持竖屏需要以下关键的几个步骤: 1.修改系统代理方法的返回值 -(UIInterfaceOrientationMask)application:(UIApplica ...

  6. react native windows create bundle folder

    生成bundle 文件 命令 react-native bundle --platform android --dev false --entry-file index.js --bundle-out ...

  7. ngrx/store effects 使用总结2:列表展示

    第一个计数器案例:http://www.cnblogs.com/axel10/p/8589122.html 完成了计数器案例后,现在开始比较能够完整的展示angular2+开发流程的案例:在线获取用户 ...

  8. Codeforces 899 C.Dividing the numbers-规律

      C. Dividing the numbers   time limit per test 1 second memory limit per test 256 megabytes input s ...

  9. Java 实现多线程切换等待唤醒交替打印奇偶数

    引言 在日常工作生活中,可能会有用时几个人或是很多人干同一件事,在java编程中,同样也会出现类似的情况,多个线程干同样一个活儿,比如火车站买票系统不能多个人买一到的是同一张票,当某个窗口(线程)在卖 ...

  10. vue开发小程序简介

    开发环境搭建 nodejs 安装最新版的nodejs,同时安装cnpm包管理器 jdk1.8 apache-maven3.3.9 Intellij Idea2018 [后端开发工具] vscode[前 ...