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 相关文章推荐
IE中jscript/javascript的条件编译
Sep 07 Javascript
jquery 日期分离成年月日的代码
May 14 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
Oct 10 Javascript
jquery获取元素值的方法(常见的表单元素)
Nov 15 Javascript
jQuery中:gt选择器用法实例
Dec 29 Javascript
浅谈javascript中的constructor
Jun 08 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
JavaScript分步实现一个出生日期的正则表达式
Mar 22 Javascript
Angular-UI Bootstrap组件实现警报功能
Jul 16 Javascript
JS基于开关思想实现的数组去重功能【案例】
Feb 18 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
javascript面向对象创建对象的方式小结
Jul 29 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用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python基础教程之缩进介绍
2014/08/29 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
在python中安装basemap的教程
2018/09/20 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
销售人员求职信
2014/07/22 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
大学生见习报告总结
2014/11/04 职场文书
颐和园英文导游词
2015/01/30 职场文书
国博复兴之路观后感
2015/06/02 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
2015双创工作总结
2015/07/24 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python