【问题标题】:change href to redirect将href更改为重定向
【发布时间】:2016-07-05 22:48:14
【问题描述】:

我使用下面的代码单击将<a> href 属性更改为重定向,
我不想使用window.locationwindow.open
的原因 因为如果我使用这种方法,当用户单击按钮时,他们仍然可以选择是否按下键盘在选项卡中打开新网址

例如a 它照常工作,但b 只更改href 不重定向,为什么?以及如何解决?

<div class="submit">
  <a>submit</a>
</div>

一个

$('.submit').on('click', function() {
  var submit = $(this);

  // var url = ...;
  $(submit).find('a').attr('href', url);
});

b

$('.submit').on('click', function() {
var submit = $(this);

  requestPost().then(function(response) {  
    // ... 

    // var url = ...;
    $(submit).find('a').attr('href', url);
  });
});

【问题讨论】:

  • “在新标签页中打开”是重要的浏览器功能。除非您有非常充分的理由,否则您不应该从您的用户那里抢夺它。
  • ??是的,我同意这很重要,这就是我问这个问题的原因。尝试找到方法,我可以使用 ajax 发布数据,用户仍然可以选择是否使用选项卡打开,而不仅仅是使用 window.open 并为用户决定。

标签: javascript jquery promise


【解决方案1】:

这是因为在a 中,您在anchor 的容器的onclick 处理程序中分配了一个href,这意味着单击事件在onclick 处理程序完成之前不会完成(因为这个处理程序只需返回false 或执行event.preventDefault 即可中止点击和导航)。

b 中,因为您使用的是异步函数,所以 onclick 处理程序在异步函数 requestPost 完成之前成功完成,因此更改锚点的 href 不会影响导航,因为 onclick 有已经完成,没有href标签,但是如果你再次点击submit,它就会导航,因为href是在之前的点击中设置的。

因此,作为一种快速解决方法,您可以做的是在分配 href 属性后触发对锚点的点击,例如

$(submit).find('a').attr('href', url).click();

【讨论】:

  • 感谢回复,我之前试过触发点击,但是会再次发布数据,无限循环
  • 那就做一件事,在$('.submit').on('click', function() { 的末尾返回false,如果SO 支持导航,让我尝试在我的答案中附加一个sn-p
  • 在这种情况下可以对 tagName 进行检查,但无论如何,您对有缺陷的过程是正确的,问题是他希望用户决定是否必须在新选项卡中打开或在当前选项卡或新窗口中。
猜你喜欢
  • 2012-03-15
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2014-02-06
  • 2011-10-23
  • 2014-12-12
  • 2019-12-20
相关资源
最近更新 更多