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用户自定义类的类名称的代码
Mar 08 Javascript
js 页面执行时间计算代码
Mar 04 Javascript
JavaScript 对象成员的可见性说明
Oct 16 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
Jan 24 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
javascript实现列表切换效果
May 02 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
vue组件间通信六种方式(总结篇)
May 15 Javascript
如何在Vue中抽离接口配置文件
Oct 31 Javascript
vue中jsonp插件的使用方法示例
Sep 10 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
Nov 05 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中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
javascript this详细介绍
2016/09/19 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
python连接PostgreSQL过程解析
2020/02/09 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
快速创建python 虚拟环境
2020/11/28 Python
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
过滤器的用法
2013/10/08 面试题
机电一体化毕业生求职信
2013/11/02 职场文书
家属答谢词
2015/01/05 职场文书
学习与创新自我评价
2015/03/09 职场文书
个人年底工作总结
2015/03/10 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL