Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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 递归单击同一元素时出现问题_Javascript_Dom Events - Fatal编程技术网

Javascript 递归单击同一元素时出现问题

Javascript 递归单击同一元素时出现问题,javascript,dom-events,Javascript,Dom Events,Recurivesly仅在同一元素上调用onclick两次,但单击操作不遵循默认操作, 这个想法是当用户点击 它不应该弹出文件浏览器,而是首先执行一些异步任务和 然后在没有用户手势的情况下调用click action,从而打开文件资源管理器 样本问题 var=false; 功能权限(cb){ setTimeout(函数(){ 单击=真; cb(); }, 2000); } 函数handleClick(e){ console.log(单击) 如果(!单击){ e、 预防默认值(); takeP

Recurivesly仅在同一元素上调用onclick两次,但单击操作不遵循默认操作, 这个想法是当用户点击
它不应该弹出文件浏览器,而是首先执行一些异步任务和 然后在没有用户手势的情况下调用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;