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的parseInt 取整使用
May 09 Javascript
50个比较实用jQuery代码段
Sep 18 Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
javascript入门教程基础篇
Nov 16 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
jQuery简单倒计时效果完整示例
Sep 20 Javascript
JavaScript制作简易计算器(不用eval)
Feb 05 Javascript
用vue和node写的简易购物车实现
Apr 25 Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 Javascript
vue 需求 data中的数据之间的调用操作
Aug 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
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP函数积累总结
2019/03/19 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
Jquery 切换不同图片示例代码
2013/12/05 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python函数式编程
2017/07/20 Python
python学习必备知识汇总
2017/09/08 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
函数指针的定义是什么
2016/08/14 面试题
办公文员的工作岗位职责
2013/11/12 职场文书
给全校老师的建议书
2014/03/13 职场文书
同学聚会通知短信
2015/04/20 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
html5表单的required属性使用
2021/07/07 HTML / CSS
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
Go gorilla/sessions库安装使用
2022/08/14 Golang