Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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_Jquery - Fatal编程技术网

如何在javascript中动态调用事件处理程序并获取其返回值?

如何在javascript中动态调用事件处理程序并获取其返回值?,javascript,jquery,Javascript,Jquery,昨天我问了一个问题,我接受了答案,但过了一段时间,我才知道答案并不完整。问题是:- 使用setTimeout(处理程序,0)立即返回,我不能使用returnsettimeout(handler,0)。如何同步运行此处理程序,并且在该处理程序完全执行并从中获取返回值之前不允许父函数完成 我很忙,所以我要再问一次,而不是再编辑那个问题。Quick answar:换一个怎么样: setTimeout(clickhandler, 0); 到 到 现在clickhandler是一个函数,对吗 请参阅

昨天我问了一个问题,我接受了答案,但过了一段时间,我才知道答案并不完整。问题是:-

使用
setTimeout(处理程序,0)
立即返回,我不能使用
returnsettimeout(handler,0)。如何同步运行此
处理程序
,并且在该处理程序完全执行并从中获取返回值之前不允许父函数完成


我很忙,所以我要再问一次,而不是再编辑那个问题。

Quick answar:换一个怎么样:

setTimeout(clickhandler, 0);


现在clickhandler是一个函数,对吗


请参阅:

由于超时是异步的,因此需要在超时内设置变量(和/或调用回调函数)

下面是一个带有回调函数的示例。你需要的是,一旦变量改变,你就想对它做些什么

var x = 1;

function callback(x) {
  console.log(x);
}

setTimeout(function() {
  x = 2;
  callback(x);
}, 2000);
一旦执行超时,这将
记录
2


根据您要做的具体操作,您可能根本不需要超时,这避免了异步性和许多麻烦。

您不需要使用
setTimeout
。如果不使用
setTimeout
,则处理程序将执行同步处理,并且可以在函数中返回所需的所有值

var x = 1;

setTimeout(function() {
  x = 2;
}, 2000);
<script>
   function f2() {
      alert('Handler declared in HTML')
   }

   buttons = document.getElementsByTagName('input');  // refine this, later

   for (i = 0, max = buttons.length; i < max; i++) {
      oldonclick = buttons[i].onclick;

      buttons[i].onclick = function() {
         alert('Prepend handler');
         oldonclick();
      }
   }
</script>

函数f2(){
警报('在HTML中声明的处理程序')
}
按钮=document.getElementsByTagName('input');//稍后再对其进行细化
对于(i=0,max=buttons.length;i
您需要了解事件驱动编程的工作原理。在设置处理程序的代码中,无法从任何类型的事件处理程序获取返回值,因为调用代码在处理程序运行之前已继续或完成。处理程序本身必须处理它返回的信息,并显示它,或者将它放在其他异步任务可以找到它的地方;或者另一个例子?也纠正了我的拼写错误
envets
events
<代码>内部数据(“事件”)…
我还没有尝试过。但我有另一个解决办法,看我原来的问题。
var x = 1;

setTimeout(function() {
  x = 2;
}, 2000);
var x = 1;

function callback(x) {
  console.log(x);
}

setTimeout(function() {
  x = 2;
  callback(x);
}, 2000);
<script>
   function f2() {
      alert('Handler declared in HTML')
   }

   buttons = document.getElementsByTagName('input');  // refine this, later

   for (i = 0, max = buttons.length; i < max; i++) {
      oldonclick = buttons[i].onclick;

      buttons[i].onclick = function() {
         alert('Prepend handler');
         oldonclick();
      }
   }
</script>