3

简化场景:

  • 我在按钮上有一个点击事件
  • 在事件中我调用了一个函数 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()所以如果我返回一个值并不重要,因为在某些时候我将能够执行我需要的额外代码

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

4

2 回答 2

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-workers),所以你传递给 timeout 的函数在点击事件完成之前不会被执行。

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

于 2013-04-18T13:06:27.910 回答
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 (*)
}
于 2013-04-18T13:12:13.233 回答