【问题标题】:e.preventDefault - is there a way to doDefault?e.preventDefault - 有没有办法做默认?
【发布时间】:2012-03-05 12:51:19
【问题描述】:

假设我有一个链接:

<a href='http://example.com/file.zip' id='dl'>Download</a>

当有人点击它时,我想做一些事情,例如:

$("#dl").live("click", function(e){
    e.preventDefault();
    $("#dlbox").fadeOut(500);
});

在我 e.preventDefault 之后有没有办法继续执行默认设置?像

$("#dl").live("click", function(e){
    e.preventDefault();
    $("#dlbox").fadeOut(500);
    e.doDefault();
});

所以它会正常运行事件?

【问题讨论】:

标签: javascript jquery javascript-events


【解决方案1】:

您只能阻止默认行为(使用e.preventDefault())。

现在,如果您希望在 .fadeOut() 方法完成时导航链接,您应该阻止默认行为并使用 fadeOut 方法的回调参数在动画完成时导航:

$("#dl").live("click", function(e){
    e.preventDefault();
    var href = this.href;
    $("#dlbox").fadeOut(500, function() {
        window.location = href;
    });
});

DEMO

【讨论】:

  • fadeOut 是异步的,你必须将代码放入淡出的回调方法中才能这样工作
  • 你假设链接,如果那是表单提交怎么办?
  • 确实 :) 在那里拍摄一般的东西
  • .live() 自 1.7 起已被弃用,因此您应该使用 .on() 或 .click() 代替。 stackoverflow.com/questions/8752321/…
【解决方案2】:

没有 doDefault() 命令,你需要重新设计你的代码。

我会阻止默认设置,然后通过window.location 直接执行 url。也可能使用与锚标签不同的标签 - 通过覆盖其功能,首先使用它是没有意义的。

例如这样的:

$("#dl").live("click", function(e){
    e.preventDefault();
    $("#dlbox").fadeOut(500, function() { window.location='www.fish.com'; });
});

【讨论】:

    【解决方案3】:

    也许this post可以帮助你?您也可以只返回 false 以防止链接转到 href 中的位置。

    【讨论】:

      猜你喜欢
      • 2023-02-14
      • 2018-07-23
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2023-03-08
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多