JavaScript实现按Ctrl键打开新页面_javascript技巧

(译者注: 本文解决的是按 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进行页面重定向时你也应该记得这一点。这是一个很小的代码改进,但对可用性的提高却是非常重要的!

时间: 2024-10-23 20:53:20

JavaScript实现按Ctrl键打开新页面_javascript技巧的相关文章

微信小程序链接传参并跳转新页面_javascript技巧

 像传统的传参一样,只是在微信里面的标签不一样而已,navigator标签的文档说明: https://mp.weixin.qq.com/debug/wxadoc/dev/component/navigator.html?t=20161122 下面是传递参数并展示新页面的一个简单栗子: 这是index.wxml代码: <navigator class="bury-wrapper wx-li" url="../detail/detail?id={{name.id}}&qu

基于JavaScript实现定时跳转到指定页面_javascript技巧

在某些场景下,需要网页在指定的时间后,网页能够自动跳转到指定页面,比如在无法找到指定网页的情况下,就会显示之前设置好的404页面,并且跳转到指定的页面,下面就是一段代码实现了此效果. 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.jb51.net/&q

Javascript 6里的4个新语法_javascript技巧

JS 的 ES6版本已经被各大浏览器广泛支持,很多前端框架也已经使用 ES6,并且还有 Babel 可以做兼容处理,所以ES6已经进入了应用阶段 如果您对 ES6 还不太熟悉,下面4个简单的基础用法可以帮助您快速了解ES6 1.使用 let 和 const 声明变量在传统的 ES5 代码中,变量的声明有两个主要问题 (1)缺少块儿作用域的支持 (2)不能声明常量 ES6中,这两个问题被解决了,增加了两个新的关键字:let 和 const 块儿作用域使用 let var a = 1; if (tr

js使用post 方式打开新窗口_javascript技巧

js中一般新打开窗口很简单直接window.open(url);就可以了, 但是由于我希望传递参数到服务端,而且参数看起来很长一串,而且get方式的提交参数长度是有限制的,因此我有以下需求: 1,js中实现post提交 2,返回的页面在新窗口显示 首先我是这么做的: 复制代码 代码如下:  $.ajax({                        type: "POST",                        url: '${contextPath}/analyse/d

解决bootstrap中modal遇到Esc键无法关闭页面_javascript技巧

bootstrap为我们提供了很多方便的页面控件,modal就是其中之一.很多人在使用modal时遇到了esc键按下无法关闭的问题,即使显式传入keyboard选项也不生效. $('#editFormItemModal').modal({show:true, keyboard:true}); 此问题在2.1以后版本出现,要解决这个问题也很简单,modal所在div添加一个tabindex属性即可: <div class="fade modal" tabindex="-1

JavaScript获取客户端IP的方法(新方法)_javascript技巧

很久以来,我都是经过http://fw.qq.com/ipaddress来得到客户端用户的IP,这个方法简单.快速.实用 . 我们调用它的写法是: <script type="text/javascript" src="http://fw.qq.com/ipaddress"></script> 它可以返回用户IP和地点,比喻: var IPData = new Array("220.181.108.85","&q

javascript禁制后退键(Backspace)实例代码_javascript技巧

复制代码 代码如下: function banBackSpace(e) {                  var ev = e || window.event;//获取event对象                  var obj = ev.target || ev.srcElement;//获取事件源                  var t = obj.type || obj.getAttribute('type');//获取事件源类型                  //获取作

ASP.NET打开新页面而不关闭原来的页面 实例代码

这篇文章介绍了ASP.NET打开新页面而不关闭原来的页面 实例代码,有需要的朋友可以参考一下,希望对你有所帮助   复制代码 代码如下: Respose.Write("<script     language='javascript'>window.open('"+     url     +"');</script>"); (打开简洁窗口): Respose.Write("<script     language='java

Response.Redirect打开新页面后js,ligerui全部失效

问题描述 Response.Redirect("../store_manage/maintain_alter.aspx/?cid="+cid+"");使用Response.Redirect传值打开新页面发现里面的javascript方法全部无效,比如我使用了ligerui控件方法$(function(){$("#produceDate").ligerDateEditor();})就找不到对象有大神请教下么