Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自setTimeout的Jquery单击处理程序_Javascript_Jquery_Settimeout - Fatal编程技术网

Javascript 来自setTimeout的Jquery单击处理程序

Javascript 来自setTimeout的Jquery单击处理程序,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我有我不知道为什么来自JSFIDLE的代码不起作用,因为我知道关于“丢失上下文”的所有假设都是错误的(至少有一半错误),因为原始超链接被正确更新(我的意思是href属性更新) 但我找到了另一个解决办法。我没有单击原始链接,而是执行以下操作: var link = document.createElement('a'); link.download = _messages.CUMMULATIVE_REPORT_NAME; link.href='data:application/csv;charse

我有

我不知道为什么来自JSFIDLE的代码不起作用,因为我知道关于“丢失上下文”的所有假设都是错误的(至少有一半错误),因为原始超链接被正确更新(我的意思是
href
属性更新)

但我找到了另一个解决办法。我没有单击原始链接,而是执行以下操作:

var link = document.createElement('a');
link.download = _messages.CUMMULATIVE_REPORT_NAME;
link.href='data:application/csv;charset=utf-8,'+ encodeURI(csvFile.join('\n\n'));

//These 2 lines are required for Firefox
link.style = "display: none";
document.body.appendChild(link);

link.click();
它甚至可以从
setTimeout
处理程序中工作。我怀疑jquery风格的点击,即使用
返回true
(我无法明确地称之为)只在主线程中起作用。每次我使用
setTimeout
时,执行都会在新线程中继续。但在新的线程中创建元素并点击它就像一种魅力

快乐编码

UPD:此解决方案在Firefox中不起作用。除非同步AJAX(ffffffuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


UPD1:为Firefox添加了解决方案。

我不知道为什么JSFIDLE中的代码不起作用,因为我理解关于“丢失上下文”的所有假设都是错误的(至少有一半错误),因为原始超链接已正确更新(我的意思是
href
属性已更新)

但我找到了另一个解决办法。我没有单击原始链接,而是执行以下操作:

var link = document.createElement('a');
link.download = _messages.CUMMULATIVE_REPORT_NAME;
link.href='data:application/csv;charset=utf-8,'+ encodeURI(csvFile.join('\n\n'));

//These 2 lines are required for Firefox
link.style = "display: none";
document.body.appendChild(link);

link.click();
它甚至可以从
setTimeout
处理程序中工作。我怀疑jquery风格的点击,即使用
返回true
(我无法明确地称之为)只在主线程中起作用。每次我使用
setTimeout
时,执行都会在新线程中继续。但在新的线程中创建元素并点击它就像一种魅力

快乐编码

UPD:此解决方案在Firefox中不起作用。除非同步AJAX(ffffffuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


UPD1:为Firefox添加了解决方案。

e.currentTarget
将在通过
setTimeout
调用时更改。如上所述,e可能不再有效。启动函数,保存对e的引用,并在其余部分中使用该引用function@RayonDabre为什么?我仍然看到它是event和currentTarget仍然是相同的-my hyperlink元素。@dmaij它不是work@A1rPun谢谢您的建议,但它不能像上面提到的那样工作。
e.currentTarget
将在通过
setTimeout
调用时更改。如上所述,e可能不再有效。启动函数,保存对e的引用,并在其余部分中使用该引用function@RayonDabre为什么?我仍然看到它是event和currentTarget仍然是相同的-my hyperlink元素。@dmaij它不是work@A1rPun谢谢你的建议,它并没有像上面提到的那样工作。好的,很高兴看到它工作。我确实做了一些修改,您可以从ajax在成功处理程序中输入调用,而不是超时。看看有什么不同。好的,很高兴看到它工作。我确实做了一些修改,您可以从ajax在成功处理程序中输入调用,而不是超时。看看有什么不同。