添加一个单击处理程序,延迟浏览器处理点击?

时间:2015-02-19 22:43:23

标签: jquery click

我想使用jQuery为链接添加点击处理程序。当用户点击链接时,jQuery需要找到附近的面板按钮,触发单击该按钮,等待面板打开(大约一秒钟),然后允许浏览器对链接执行自然操作 - 将页面锚定到之前隐藏在折叠面板下的位置。

$('a.fn').click(
  function(){
    $(this).closest(div.panel).not('.isOpen).find('div.panel a.opener').trigger('click');
    setTimeout(1000);
    return true;
  }
);

单击时,面板会打开,但浏览器会立即尝试锚定页面并感到困惑,停在锚点目标的一半处。

如何让浏览器在执行链接操作之前等待一秒钟?

2 个答案:

答案 0 :(得分:1)

您应该使用preventDefault启动您的功能。

$('a.fn').on('click', function(ev) {
  ev.preventDefault();

  window.setTimeout(function() {
    $(this).closest(div.panel).not('.isOpen').find('div.panel a.opener').trigger('click');
  }, 1000);
  return true;
});

答案 1 :(得分:1)

您似乎误解了setTimeout应该如何运作。我尝试过这样的事情:

$('a.fn').on('click', function(e){
    e.preventDefault();
    var href = this.href;
    $(this).closest('div.panel:not(.isOpen)').find('div.panel a.opener').trigger('click');
    setTimeout(function() {
        window.location = href; // default anchor click action
    }, 1000);
    return true;
  }
);