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 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
Sep 03 Javascript
支持ie与FireFox的剪切板操作代码
Sep 28 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
jQuery之动画效果大全
Nov 09 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
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
ajax php 实现写入数据库
2009/09/02 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
维修工先进事迹
2014/05/29 职场文书
运动会班级口号
2014/06/09 职场文书
毕业生求职信
2014/06/10 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
股份合作协议书
2014/09/10 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
关于国庆节的广播稿
2015/08/19 职场文书