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在成功处理程序中输入调用,而不是超时。看看有什么不同。