当事件使用javascript停止时,从函数确定

时间:2013-04-18 13:02:33

标签: javascript javascript-events jquery

简化方案:

  • 我在按钮上有点击事件
  • 在事件内部我调用了函数X
  • 函数X返回值
  • 使用收到的数据点击事件更改DOM(实际呈现jQuery模板)

示例代码:

$("button").click(function()
{
    var response = FunctionX();

    doTemplateRendering(response); //(*)
});

function FunctionX()
{
    //some code

    return some_value;

    //The click event has finished, so now make a little adjust to the generated dom (*)
}

问题是:

  • 我是否有办法确定点击停止的时间是FunctionX()
  • 或者有没有办法doTemplateRendering()触发我可以从FunctionX()捕获的内容,所以如果我返回一个值并不重要,因为在某些时候我将能够执行我需要的额外代码

这背后的原因是这是框架的一部分,我无法更改点击事件。

2 个答案:

答案 0 :(得分:2)

您无法从函数返回值,然后在同一函数中进行进一步处理。但您可以使用setTimeout()安排一些代码以便稍后运行:

function FunctionX()
{
    //some code    

    setTimeout(function() {
        //The click event has finished, so now make a little adjust to the generated dom (*)
    }, 5);

    return some_value;
}

JS是单线程的(如果我们忽略web工作者),所以传递给timeout的函数在click事件结束后才会执行。

或者,您可以将第二个单击处理程序绑定到同一个按钮并在那里进行额外处理 - jQuery保证事件处理程序(对于相同的事件和元素)将按它们绑定的顺序运行。

答案 1 :(得分:0)

不确定这是否适合你,但你不能使用传递给FunctionX的回调函数吗?

$("button").click(function()
{
    var fn = funcion(){response){
         doTemplateRendering(response);
    }
    FunctionX(fn);

});

function FunctionX(fn)
{
    //some code

    fn(some_value);

    //The click event has finished, so now make a little adjust to the generated dom (*)
}