我试图在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);
});
});
Run Code Online (Sandbox Code Playgroud)
当然,这不会按预期工作,但可能会显示我正在尝试做的事情.
我无法使用插件,因为这是一个没有在线访问权限的托管环境.
有任何想法吗?
我可能会做这样的事情.
$("a").click(function(event) {
event.preventDefault();
doStuff(this);
var url = $(this).attr("href");
setTimeout(function() {
hideMessage();
window.location = url;
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
我不确定是否url可以从定时功能中看到.如果没有,您可能需要在click处理程序之外声明它.
编辑:如果你需要从定时功能触发事件,你可以使用类似于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
}
});
});
Run Code Online (Sandbox Code Playgroud)
编辑:经过一些测试和研究,我不确定它是否真的可以触发<a>元素的原始点击事件.它似乎可能是除了以外的任何元素<a>.
Jim*_*ath -2
这可能有效:
$(document).ready(function() {
$("a").click(function(event) {
event.preventDefault();
doStuff(this);
setTimeout(function() {
hideMessage();
$(this).click();
}, 1000);
});
});
Run Code Online (Sandbox Code Playgroud)
注意:完全未经测试
| 归档时间: |
|
| 查看次数: |
13668 次 |
| 最近记录: |