将href更改为重定向

时间:2016-03-19 01:54:17

标签: javascript jquery promise

我使用下面的代码点击将<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);
  });
});

1 个答案:

答案 0 :(得分:0)

这是因为在a中您在href容器的onclick处理程序中分配了anchor,这意味着点击事件将无法完成onclick处理程序已完成(因为此处理程序能够通过返回false或执行event.preventDefault来中止点击和导航。)

b中因为您正在使用异步函数,onclick处理程序在异步函数requestPost完成之前成功完成,因此更改锚点的href没有导航影响因为onclick已经完成且没有href标记,但是如果再次点击submit,那么它会导航,因为在前一次点击中设置了href

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

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