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 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
IE8下关于querySelectorAll()的问题
May 13 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
js实现图片拖动改变顺序附图
May 13 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
Jun 05 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
Jul 29 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 Javascript
Vue 数据响应式相关总结
Jan 28 Vue.js
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
实用函数5
2007/11/08 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
Python深入学习之装饰器
2014/08/31 Python
Python之re操作方法(详解)
2017/06/14 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python如何从文件读取数据及解析
2019/09/19 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
24岁生日感言
2014/01/13 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
担保书格式及范文
2014/04/01 职场文书
办公室主任个人总结
2015/02/28 职场文书
升学宴家长致辞
2015/07/27 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python