我试图延迟 jQuery 脚本中的一个或多个默认事件。上下文是,我想在用户执行某些操作(主要单击)时在默认操作触发之前几秒钟向用户显示一条消息。
伪代码:
- 用户点击链接/按钮/元素
- 用户收到一条弹出消息,指出“您正在离开网站”
- 消息在屏幕上保留 X 毫秒
- 默认操作(也可以是 href 链接以外的操作)触发
到目前为止,我的尝试如下:
$(document).ready(function() {
var orgE = $("a").click();
$("a").click(function(event) {
var orgEvent = event;
event.preventDefault();
// Do stuff
doStuff(this);
setTimeout(function() {
// Hide message
hideMessage();
$(this).trigger(orgEvent);
}, 1000);
});
});
当然,这并没有按预期工作,但可能会显示我正在尝试做的事情。
我无法使用插件,因为这是一个无法在线访问的托管环境。
有任何想法吗?
我可能会做这样的事情。
$("a").click(function(event) {
event.preventDefault();
doStuff(this);
var url = $(this).attr("href");
setTimeout(function() {
hideMessage();
window.location = url;
}, 1000);
});
我不确定是否url
从定时函数内部可以看出。如果没有,您可能需要在单击处理程序之外声明它。
Edit:如果您需要从定时函数触发事件,您可以使用类似于 karim79 建议的内容,尽管我会进行一些更改。
$(document).ready(function() {
var slept = false;
$("a").click(function(event) {
if(!slept) {
event.preventDefault();
doStuff(this);
var $element = $(this);
// allows us to access this object from inside the function
setTimeout(function() {
hideMessage();
slept = true;
$element.click(); //triggers the click event with slept = true
}, 1000);
// if we triggered the click event here, it would loop through
// this function recursively until slept was false. we don't want that.
} else {
slept = false; //re-initialize
}
});
});
Edit:经过一些测试和研究,我不确定是否真的可以触发原始的点击事件<a>
元素。似乎对于除此之外的任何元素都是可能的<a>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)