【问题标题】:Call window.open() inside loop during handling of element click event在处理元素单击事件期间在循环内调用 window.open()
【发布时间】:2013-12-16 19:01:34
【问题描述】:

我正在尝试根据某些标准在循环 x 次 (target=_blank) 内调用 window.open()。但它只会打开一次新标签。我做错了什么吗?这是我的代码

$('#spogo_' + _sp.spid).button()
     .button('option', 
        {
             label : 'Go to',
             icons : {
                 primary : 'ui_icon_goto'
             }
        })
    .on('click', function(){
         var selRow = model._getSelectedRow($('#spt_' + this.id.split('spogo_')[1]).dataTable())[0];
         for(var i = 0 ; i < selRow.cells.length ; i ++){
             var cell = selRow.cells[i];
             if($(cell).hasClass('vdata_cell')){
                  window.open($(cell).attr('data'), '_blank');
             }
         }
    });

我已经尝试过调试,发现if 发生了多次,顺便说一句,在调试期间没有打开任何 URL。

编辑: 抱歉,弹出窗口被阻止了:D 但是现在一个网址在新标签中打开,另一个在新窗口中,我该如何解决这个问题?

【问题讨论】:

  • 你到底为什么要循环和检查一个类?只需使用选择器来查找元素。
  • $(cell).attr('data') 的值是多少?我刚试过window.open('http://www.cheese.com', '_blank'),它会打开多个标签。
  • @Mark 也许原因是我在 click() 事件处理程序中调用?
  • @ArsenAlexanyan 应该没什么区别,你的网址是完全格式化的吗?

标签: javascript jquery jquery-ui


【解决方案1】:

您只能指定'_blank',然后用户浏览器将决定它是在新选项卡还是新窗口中,您不能覆盖该“功能”。

【讨论】:

  • :( 谢谢。但是用'Ctrl'点击它会在新标签页中打开
  • 默认情况下,大多数浏览器会在新标签页中打开ctrl+click 链接。
  • @TomPietrosanti 我们可以覆盖这个功能吗?像 ctrl+click 这样处理每次点击?
  • 不,我们不能,而且我认为我们不应该能够。这取决于用户。如果定义了大小(取决于浏览器),我相信window.open 可能会在窗口而不是选项卡中打开(尽管用户进行了设置),但带有target="_blank" 的链接将遵循浏览器首选项设置。
  • 当我在 Chrome 中使用 ctrl+click 时,它仍然会在新的单独窗口中打开标签。我想这完全取决于浏览器如何解决。
【解决方案2】:

您无法解决此问题,这是用户在浏览器中希望打开链接的首选项。从可用性的角度来看,强制用户在新窗口中打开链接也是不受欢迎的

【讨论】:

    【解决方案3】:

    检查window.open 的规范。您编写window.open(url, '_blank') 的方式是创建一个名为_blank 的窗口,并且每次都在同一个窗口中打开网址。尝试通过附加计数器或其他东西的数字来更改名称。

    至于在选项卡中打开还是在窗口中打开 - 这是浏览器中的首选项,您无法控制它。

    【讨论】:

    • 这就是你想要做的吗?
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2020-05-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2017-07-01
    • 2011-10-01
    相关资源
    最近更新 更多