Javascript 递归单击同一元素时出现问题
Recurivesly仅在同一元素上调用onclick两次,但单击操作不遵循默认操作, 这个想法是当用户点击Javascript 递归单击同一元素时出现问题,javascript,dom-events,Javascript,Dom Events,Recurivesly仅在同一元素上调用onclick两次,但单击操作不遵循默认操作, 这个想法是当用户点击 它不应该弹出文件浏览器,而是首先执行一些异步任务和 然后在没有用户手势的情况下调用click action,从而打开文件资源管理器 样本问题 var=false; 功能权限(cb){ setTimeout(函数(){ 单击=真; cb(); }, 2000); } 函数handleClick(e){ console.log(单击) 如果(!单击){ e、 预防默认值(); takeP
它不应该弹出文件浏览器,而是首先执行一些异步任务和
然后在没有用户手势的情况下调用click action,从而打开文件资源管理器
样本问题
var=false;
功能权限(cb){
setTimeout(函数(){
单击=真;
cb();
}, 2000);
}
函数handleClick(e){
console.log(单击)
如果(!单击){
e、 预防默认值();
takePermission(函数(){
document.getElementById('inp')。单击();
});
}
}
document.getElementById('inp')。onclick=handleClick;
在第一次单击后,您将clicked指定为true,这意味着您的if语句不会触发
因此,在第一次调用之后,就不再有对click()的调用了。您希望实现什么?每2秒输出一次,直到永远?想要的行为是什么?看起来很不清楚你想要什么。我想应该只有一个。单击函数调用应该在那里,但应该是打开文件资源管理器模式弹出窗口,而不是发生,这实际上是我们想要的behaviour@trincot请查看此问题。我已编辑问题语句。您只能从用户事件处理程序中触发文件对话框。使用setTimeout,您将不再处于那种状态。谢谢Nando,这是我也希望只有一个。单击函数调用应该在那里,但它应该是打开文件资源管理器模式弹出窗口,而不是发生,这实际上是所需的行为
<body>
<input id="inp" type="file" />
</body>
var clicked = false;
function takePermission(cb) {
setTimeout(function() {
clicked = true;
cb();
}, 2000);
}
function handleClick(e) {
console.log(clicked)
if (!clicked) {
e.preventDefault();
takePermission(function() {
document.getElementById('inp').click();
});
}
}
document.getElementById('inp').onclick = handleClick;