2011-11-06 51 views
2
function myFunction() { 
    wait(); //what I put there? 
    return; 
} 

myFunction(); 

//this is an event; when its triggered I want function to resume 
onSomething = function() { 
    myFunction.resume(); //what I put there? 
} 

它只是一个地方的经验。请注意,虽然(!resume)不起作用,因为这会阻止事件发生。在返回之前做一个等待事件的函数?

+0

你可以使用[generators](https://developer.mozilla.org/en/JavaScript/Guide/Iterators_and_Generators)来做到这一点,但这不是交叉-browser。它将与ECMAScript 6来...虽然... –

回答

2

所以,用发电机它看起来像这样:

function test() { 
    // first part of function 
    yield; 
    // second part of function 
    yield; 
} 

var gen = test(); // creating a generator 

gen.next(); // execute first part 

button.onclick = function() { 
    gen.next(); // execute second part on button click 
}; 

现场演示:http://jsfiddle.net/MQ9PT/

然而,这并不超越Firefox浏览器。它将成为下一版ECMAScript标准的一部分...

5

这是不可能的。

而不是等待事件,你想把你需要什么,当它发生到onSomething函数来完成。

+0

这实际上不可能在JavaScript上,我意识到它不是必要的。 – MaiaVictor

+0

下面是一个需要这种特性的情况:捕获oncontextmenu事件并且需要基于鼠标事件返回true或false的函数。浏览器的contextmenu不能以编程方式触发。 – automaton

+0

@automaton你是什么意思“基于鼠标事件”?如果用户当前位于上下文菜单中,该鼠标事件何时会发生? –

4

你有你的大脑切换到事件,而不是“传统”的编程流程思考。要做到这一点的方法是:

function myFunctionPart1() { 
    doSomething(); 
} 

function myFunctionPart2() { 
    doSomethingElse(); 
} 

myFunctionPart1(); 

onSomething = function() { 
    myFunctionPart2(); 
} 
相关问题