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 相关文章推荐
关于jquery input textare 事件绑定及用法学习
Apr 03 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
Jun 27 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
Jan 09 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
javascript基本数据类型及类型检测常用方法小结
Dec 14 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
Mint UI实现A-Z字母排序的城市选择列表
Dec 28 Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
vue之延时刷新实例
Nov 14 Javascript
js prototype深入理解及应用实例分析
Nov 25 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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
Vue.use源码分析
2017/04/22 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
vue中的mvvm模式讲解
2019/01/31 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
python网络编程之读取网站根目录实例
2014/09/30 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
新闻学毕业生自荐信
2013/11/15 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
新书吧创业计划书
2014/01/31 职场文书
七夕情人节促销方案
2014/06/07 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
同学聚会邀请函
2015/01/30 职场文书
签字仪式主持词
2015/07/03 职场文书
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS