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

Add a click handler that delays the browser handling the click?

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

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

点击后,面板打开,但浏览器立即尝试锚定页面并变得混乱,停在锚定目标的一半左右。

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

您应该使用 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;
});

您似乎误解了 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;
  }
);