我正在使用records audio in the browser的小型库并将其上传到服务器,但是希望为用户提供单击按钮后就可以上传到浏览器的选项。
大多数库都导入到html页面,因此我要调用的函数及其参数在页面上不可用。
在调用“上传”函数的函数中,我尝试将函数调用分配给onclick事件:
document.getElementById("clickMe").onclick = endFile(buf, 'mp3');
HTML是:
<a href='#' id="clickMe" class="btn btn-default">Upload</a>
我猜这是过早触发,因为该功能正在“评估”中。该库使用jQuery,我尝试将
e.preventDefault()
和e.stopPropagation()
添加到外部函数中,但这两个都不起作用。注意,当我分配一个匿名函数时,它没有被调用,因此使用:
document.getElementById("clickMe").onclick = function(){
endFile(buf, 'mp3');
}
这似乎正在工作。有人可以解释一下原因,并且一定要让我知道为什么这可能是不明智的方法。
最佳答案
函数过早触发的原因是,当您打算分配它时,实际上是在调用它。
改变这个...
document.getElementById("clickMe").onclick = endFile(buf, 'mp3');
为此...
document.getElementById("clickMe").onclick = function() {
endFile(buf, 'mp3');
};
或这个...
document.getElementById("clickMe").onclick = endFile.bind(this, buf, 'mp3');
为了进一步解释-
endFile(buf, 'mp3')
实际上调用了该函数。因此,不是将您的函数分配为onclick-handler,而是对其进行调用并分配其返回值。