在jQuery中挂起默认事件

Bjø*_*nap 9 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);
    });
});
Run Code Online (Sandbox Code Playgroud)

当然,这不会按预期工作,但可能会显示我正在尝试做的事情.

我无法使用插件,因为这是一个没有在线访问权限的托管环境.

有任何想法吗?

DLH*_*DLH 6

我可能会做这样的事情.

$("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)

注意:完全未经测试