JavaScript实现按Ctrl键打开新页面


Posted in Javascript onSeptember 04, 2014

(译者注: 本文解决的是按 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进行页面重定向时你也应该记得这一点。这是一个很小的代码改进,但对可用性的提高却是非常重要的!

Javascript 相关文章推荐
javascript之大字符串的连接的StringBuffer 类
May 08 Javascript
javascript 显示当前系统时间代码
Dec 28 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
谈谈JavaScript的New关键字
Aug 26 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
谈谈JavaScript中的函数
Sep 08 Javascript
js实现图片在未加载完成前显示加载中字样
Sep 03 #Javascript
jquery.idTabs 选项卡使用示例代码
Sep 03 #Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 #Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 #Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
Sep 03 #Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 #Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 #Javascript
You might like
使用PHP免费发送定时短信的实例
2016/10/24 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python实现多线程网页下载器
2018/04/15 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
python实现代码统计器
2019/09/19 Python
用Python解数独的方法示例
2019/10/24 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
建筑班组长岗位职责
2014/01/02 职场文书
村干部承诺书
2014/03/28 职场文书
2014年超市工作总结
2014/11/19 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python