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 function调用时的参数检测常用办法
Feb 26 Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 Javascript
js中array的sort()方法使用介绍
Feb 20 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
在JSP中如何实现MD5加密的方法
Nov 02 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
js html实现计算器功能
Nov 13 Javascript
ES6 Promise对象的含义和基本用法分析
Jun 14 Javascript
vue实现简单计算商品价格
Sep 14 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的开发框架的现状和展望
2007/03/16 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
angular十大常见问题
2017/03/07 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
python3 使用traceback定位异常实例
2020/03/09 Python
django项目中新增app的2种实现方法
2020/04/01 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
妇科医生自荐信
2013/11/05 职场文书
敬老月活动总结
2014/08/28 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
网络营销实训总结
2015/08/03 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js