Jquery settimeout按钮单击其自己的处理程序

时间:2013-09-05 19:45:24

标签: jquery return settimeout

这对你们来说是一个奇怪的 - 我相信这个问题与返回虚假或初始无效有关。我有一个按钮......

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

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

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;
}

“What”只是按钮的id,因此可以再次定位。这一切都有效,除了第二个按钮点击。如果我将鼠标悬停在按钮上,则href确实已更改为文件链接,但第二次永远不会自动点击。 它是从初始函数返回false,还是javascript:void(0),我不确定?任何帮助非常感谢。我在Stack的其他地方读到人们将文件加载到框架中以及各种各样的东西以使文件链接起作用,但这让我觉得更合乎逻辑,更清晰。

1 个答案:

答案 0 :(得分:0)

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

  

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

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

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

为:

  window.location.href = data;