【问题标题】:Jquery settimeout button click inside its own handlerJquery settimeout 按钮在其自己的处理程序内单击
【发布时间】:2013-09-09 18:42:33
【问题描述】:

这对你们所有人来说都是一个奇怪的问题 - 我相信这个问题与返回 false 或初始 void 有关。我有一个按钮....

<a href="javascript:void(0)" id="csv1" onclick="formexport(vars etc)">Click me<a>

然后在函数内部,我对 php 页面进行 ajax 调用,该页面根据传递给它的变量生成 Excel 文件,然后在完成时删除 onclick 属性并将 href 属性替换为指向新创建文件的链接然后再次单击该按钮。比如……

function formexport(what, formname, tabid, start, finish, folder){
    $filename = ("/clients/" + folder + "/" + $formname + "-" + finish + ".csv");
    $.ajax({
        url: "formexport.php?rand=" + new Date().valueOf(),
        type: "POST",
        data: { start: start, finish: finish, tab: tabid, form: formname, filename: $filename }
    }).done(function(data){
            $('#' + what).attr('href', data).removeAttr('onclick');
            setTimeout(function() { $('#' + what).click(); }, 20);
    });
    return false;
}

“什么”只是按钮的 id,以便它可以再次成为目标。除了第二个按钮点击之外,这一切都有效。如果我将鼠标悬停在按钮上,则 href 确实已更改为文件链接,但它从未第二次自动单击。 是初始函数的返回 false 还是 javascript:void(0),我不确定?非常感谢任何帮助。我在 Stack 上的其他地方读到过,人们将文件加载到框架中以及各种使文件链接正常工作的事情,但这让我觉得更合乎逻辑和更清晰。

【问题讨论】:

    标签: jquery return settimeout


    【解决方案1】:

    另一个 StackOverflow 问题 jquery click doesn't work on hyperlink 给出了“为什么这不起作用”的简单答案:

    需要注意的重要一点是它不会重复单击链接。它只触发相关事件。

    您的查询可能有一个非常简单的解决方案,除非您的问题没有提及重要的事情。只需更改:

      $('#' + what).attr('href', data).removeAttr('onclick');
      setTimeout(function() { $('#' + what).click(); }, 20);
    

    到:

      window.location.href = data;
    

    【讨论】:

    • Gidday Adrian,感谢您的回复 bud :-) 那是我最初在那里的内容,但它也不起作用(document.location.href 也没有)。几乎就好像删除 onclick 属性会删除对当前函数的进一步处理。我被难住了 - 除了 removeAttr 行之后的任何东西之外,一切正常。一个可能的解决方案可能是从函数外部调用 setTimeout?
    • data 的值是什么,那么 - 字符串中是否有可能没有被注意到的其他内容? window.open() 怎么样?
    • 之前也尝试过 bud :-) data 的值是文件的路径,例如yyyyy.com/clients/clientfolder/mytab10.20.2013.csv 我可能做的只是让 ajax 请求返回成功并让 php 文件为链接发出标头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多