javascript - 在 jQuery 中暂停默认事件

标签 javascript jquery

我正在尝试延迟 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从定时函数内部可以看出。如果不是,您可能需要在点击处理程序之外声明它。

编辑:如果您需要从定时函数触发事件,您可以使用类似于 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
    }
  });
});

编辑:经过一些测试和研究,我不确定是否真的有可能触发 <a> 的原始点击事件。元素。除了 <a> 之外的任何元素似乎都是可能的.

关于javascript - 在 jQuery 中暂停默认事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1238477/

相关文章:

javascript - 将地理 WGS 84 转换为 Web 墨卡托 102100

javascript - 在手机和平​​板电脑中使用 jQuery mobile 开发的网站的行为

javascript - 使用 jquery 查找父容器的子容器

javascript - jQuery AJAX 不加载带有哈希值的 URL

点击事件的 jQuery 代码

javascript - 单击时在两个函数循环之间切换

javascript - AngularJS Dependency Injection 在哪里指定?

javascript - 如何从十六进制字符串在 Mongoose 4.0.x 中创建 ObjectId?

javascript - 自执行的匿名函数和闭包

php - 使用 jQuery、PHP、MySQL 选择值