【问题标题】:How to open a new tab trigger by the scroll button如何通过滚动按钮打开新标签触发器
【发布时间】:2013-03-25 04:11:17
【问题描述】:

我正在制作一个 php/html 应用程序,当用户单击行 (<tr>) jquery 打开该记录时,它会在表格中显示一些数据。

这是代码:

$.fn.linkRow = function(element) {
    thisRow = this.find('tbody tr');

    thisRow.on('click', function() {
        hrefLocation = $(this).find('td.link:first a').attr('href');
        if (hrefLocation) {
            window.location.href = hrefLocation;
        };
    }).addClass((thisRow.has('td.link')) ? 'pointer' : '');
    return this;
};

事实是:用户无法在新选项卡中打开记录。唯一的方法是复制并粘贴 href... 而我的用户不会这样做。

如果对滚动按钮触发的事件以及如何打开新标签进行一些研究,后者几乎是不可能的,所以......有没有人可以想办法?

编辑:我的意思是鼠标滚轮...通常这会在新标签页中打开一个链接。

PS:我必须使用表格,在某些时候我会为此制作一个基于 css 的表格布局(不需要 javascript),但在这个版本的软件中我不能这样做。


谢谢!

这是最终代码:

$.fn.linkRow = 函数(元素){
    thisRow = this.find('tbody tr');

    thisRow.not('a').on('mouseup', function(e) {
        hrefLocation = $(this).find('td.link:first a:first').attr('href');
        如果(hrefLocation){
           如果(e.which == 2){
              window.open(hrefLocation);
           }
           别的{
              window.location.href = hrefLocation;
           }
        };
    }).addClass( ( thisRow.has('td.link') ) ? 'pointer' : '' );
    返回这个;
};

但是...鼠标滚轮点击不符合我的意图:

如果你点击一个链接(a 标签)> 打开一个新标签

如果您单击无链接(任何其他标签)> 它将根据您的鼠标位置滚动。 如果你向上移动鼠标,它会向上滚动,所以

所以...我可以工作,但我绝对需要制定一个无 JavaScript 的解决方案。

【问题讨论】:

  • 滚动按钮到底是什么意思?我不知道点击一下会如何影响故事。
  • 我想我明白了——我想他的意思是鼠标中键点击(就像用“第三鼠标键”点击一样(映射到许多鼠标上的滚轮点击))在新选项卡中打开普通链接,他想在 JavaScript 中复制它。
  • 假设我的上述假设是正确的,请查看 stackoverflow.com/questions/5833928/… 之类的帖子,了解如何检测使用了哪个鼠标按钮(您将无法在新选项卡中显式打开,但您可以将目标设置为 _blank,正如下面有人建议的那样)。
  • @IainCollins 啊,人们可能有也可能没有的滚轮。 :)
  • 是的!我的意思是鼠标中键...

标签: javascript jquery html


【解决方案1】:

如果您想在新标签页中打开链接而不是在同一页面中,则需要替换

window.location.href = hrefLocation;

window.open(hrefLocation);

【讨论】:

  • +1 - 虽然新标签或新窗口完全依赖于浏览器。
  • 谢谢...它有效!实际上我只需要使用 Chrome 并且所有用户都有一个鼠标滚轮(四个......也许五个用户)......现在当用户点击左键时,它会在同一个选项卡中打开,当用户点击鼠标滚轮在新选项卡中打开。再次感谢...
【解决方案2】:

mouseup 更改 click 并使用值为 2 的 e.with(中间按钮):

$.fn.linkRow = function(element) {
    thisRow = this.find('tbody tr');

    thisRow.on('mouseup', function(e) {
        hrefLocation = $(this).find('td.link:first a').attr('href');
        if ( hrefLocation ) {
           if (e.which == 2) { 
              window.open(hrefLocation);
           }
           else{
              window.location.href = hrefLocation;
           }
        };
    }).addClass( ( thisRow.has('td.link') ) ? 'pointer' : '' );
    return this;
};

【讨论】:

  • 我的工作也很出色...在...'mouseup',function() 中添加一个'e'。谢谢
【解决方案3】:

试试下面的方法

$(document).scroll(function(){
if(!tabOpen){
    window.open('url', 'window name', 'window settings');
    tabOpen = true;
}
});

【讨论】:

    【解决方案4】:

    几个月前我遇到了类似的问题。

    您可以将每个 td-content 包装成一个普通的 a-Tag(并使用 _target="blank"),在这种情况下不需要 javascript!

    ...或者你使用 js:

    thisRow.click(function(){
      window.open('url', 'window name', 'window settings');
      return false;
    });
    

    【讨论】:

      【解决方案5】:

      window.open() 可以解决问题,但也取决于浏览器配置

      不确定滚动按钮是什么意思,但如果是鼠标滚轮,那么您可以使用此脚本在滚轮向上/向下触发事件。

      http://brandonaaron.net/code/mousewheel/demos

      【讨论】:

        【解决方案6】:

        我不确定您是否想知道如何使用 jquery 进行中间点击事件,或者您是否想知道如何打开一个新选项卡,但这里是:

        中间点击事件:

        $("tr").live('mousedown', function(e) { 
         if( (e.which == 2) ) {
           alert("middle button"); 
         }
           e.preventDefault();
        });
        

        新标签:

        正如所有其他人所说,使用以下内容:

        window.open(href);
        

        同时单击鼠标中键和打开链接:

        $("tr").live('mousedown', function(e) { 
         if( (e.which == 2) ) {
            window.open(href);
         }
           e.preventDefault();
        });
        

        编辑: 一些资料来源: Jquery: detect if middle or right mouse button is clicked, if so, do this:

        Detect middle button click (scroll button) with jQuery的回答也可以帮助解决一些与IE的兼容性问题

        【讨论】:

        • 上次我测试 Firefox 的弹出窗口阻止程序不允许您在 mousedown 事件上打开新窗口(这似乎有点武断,因为它对 click 事件非常满意),尽管这可能是在其他浏览器中有所不同。
        【解决方案7】:

        要在新标签页中打开,请使用:

        window.open(hrefLocation);
        window.open(hrefLocation,'_blank'); //Or this
        window.open(hrefLocation,'_newtab'); //Or this
        

        其中一个应该可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-10
          • 2015-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-16
          • 2012-02-12
          相关资源
          最近更新 更多