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

使用javascript从函数确定事件何时停止,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,简化场景: 我在按钮上有一个点击事件 在事件内部,我调用函数X 函数X返回一个值 单击事件使用接收到的数据更改DOM(实际呈现jQuery模板) 示例代码: $("button").click(function() { var response = FunctionX(); doTemplateRendering(response); //(*) }); function FunctionX() { //some code return some_val

简化场景:

  • 我在按钮上有一个点击事件
  • 在事件内部,我调用函数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()中捕获的东西,这样我返回一个值就无关紧要了,因为在某个时候我将能够执行我需要的额外代码

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

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

JS是单线程的(如果我们忽略web workers),因此传递给timeout的函数在click事件完成后才会执行


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

不确定这是否适用于您,但您不能使用传递给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 (*)
}

你的问题很不清楚,特别是第一个问题。“当点击停止时,表单
FunctionX
?”是什么意思?当鼠标按钮被释放时,您在寻找什么?我们有
mouseup
。doTemplateRendering()
函数有回调吗?一旦
Functionx
返回了一个值,它就不能执行任何其他操作。您所说的:确定单击何时停止form Functionx()?也许您想说functionX()将从$(“button”)中删除click()方法?换句话说,您的意思是functionX()将不允许$(“按钮”)继续单击?试着编辑你的问题,让它更清楚。@T.J.Crowder我知道这让人困惑。我正在尝试在一个我无法改变的事件之后做一些额外的处理,我考虑过这一点。问题是:如果settimeout计划为2秒,渲染时间为3秒,是否可能存在冲突?假设渲染是使用完全同步的代码完成的,则不会出现问题,直到当前代码完成执行后,才会执行超时,无论花费多长时间。如果渲染有一个异步组件(例如,如果它执行某种动画),那么您可能无法判断渲染何时完成,除非它允许您提供回调函数。听起来很有希望。我试试看
$("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 (*)
}