添加一个点击处理程序来延迟浏览器处理点击?
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;
}
);
我想使用 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;
}
);