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 相关文章推荐
jQuery ui1.7 dialog只能弹出一次问题
Aug 27 Javascript
Javascript 判断Flash是否加载完成的代码
Apr 12 Javascript
基于jquery的返回顶部效果(兼容IE6)
Jan 17 Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
js实现前端分页页码管理
Jan 06 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
PHP基础知识介绍
2013/09/17 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
jquery text()要注意啦
2009/10/30 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python定时器实例代码
2017/11/01 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
学生请假条格式
2014/04/11 职场文书
拉歌口号大全
2014/06/13 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
js 实现验证码输入框示例详解
2022/09/23 Javascript