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事件模型代码
Jul 01 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
Oct 16 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
Javascript 遮罩层和加载效果代码
Aug 01 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
jquery等待效果示例
May 01 Javascript
JS实现点击按钮获取页面高度的方法
Nov 02 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
Jul 31 Javascript
koa router 多文件引入的方法示例
May 22 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安装攻略:常见问题解答(一)
2006/10/09 PHP
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
初学python数组的处理代码
2011/01/04 Python
Python的Django框架中的Context使用
2015/07/15 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
乐山大佛导游词
2015/02/02 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA