2015-07-12 63 views
0

事件监听器实际上在事件完成之前开始运行他们的代码,因此我们有能力阻止Default()。但是如果我必须在事件结束后才能做某件事,那么以前不这样做真的很重要?JS在事件发生后做了些什么

我试着将需要该事件就像一个自调用函数听者的return语句后只完成后运行该代码:

$(...).on(event, function(evt){ 
    //do stuff 
    return (function(){ 
     // do stuff after the event 
     })(); 
}); 

但是,这是没有帮助的。似乎工作的唯一的东西是使用setTimeout。但它并不是一个好主意,因为它不是确定性的,在某些情况下超时可能会变得不足,并且这个想法会失败。 只有在活动结束后我该如何做点什么?

+0

事件处理程序中的// do stuff是什么?什么是确定_“事件结束后_”的方法?可以创建stacksnippets,jsfiddle http://jsfiddle.net来演示吗? – guest271314

+0

@vinayakj _“使用$ .when正如上面提到的问题'答案'_如果传递给'$ .when()'的函数不是jQuery延迟对象会立即运行吗? – guest271314

+0

@vinayakj,我如何将它链接到预定义事件之一?就像在提交表单后做些事情一样? –

回答

0

作为浏览器优化,事件处理程序稍早被调用以防止可能的阻塞行为。你可以使用setTimeout稍微延迟30ms。根据定义调用和处理事件是不确定的。它不知道“完成”事件意味着什么。你对处理程序的处理有更多的上下文。如果是XHR调用,那么会有onreadystatechange回调,如果它正在加载图像,请使用“onload”事件。表单提交,如果通过AJAX调用完成,可以通过readyState == 4检测;否则你可能会检测到服务器端的$ _​​POST数据并注入一个脚本块。