简化方案:
示例代码:
$("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()
捕获的内容,所以如果我返回一个值并不重要,因为在某些时候我将能够执行我需要的额外代码这背后的原因是这是框架的一部分,我无法更改点击事件。
答案 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 (*)
}