2017-05-30 51 views
2

我创建一个小的JavaScript/jQuery的带型动物的步骤应用。 为此我正在使用具有不同功能的js文件。JavaScript的嵌套函数:如何避免环路

在文件的顶部,我把我的第一个功能。 在我的第一个函数中,我点击一个按钮时调用第二个函数。 在第二个函数中,我想回拨第一个函数,但是第二个函数的“外部”:我的意思是我不希望第一个函数在第二个函数内运行,因为循环效应...

myFirstFunction(); 

function myFirstFunction() { 

    // some code 

    $('myButton').click(function() { 
     mySecondFunction(); 
    } 

} 

function mySecondFunction() { 

    // some code 

    $('myOtherButton').click(function() { 
     myFirstFunction(); 
    } 

} 

我不知道这是可能的,可能是我最好的使用对象或其他,但我敢新的JavaScript ... 在此先感谢您的帮助。

+0

你可能想要删除按钮单击事件$(“myButton的”)关闭在那些回调,这样的每一个(“点击”)。单击按钮时不会调用两个事件... –

+5

在其他事件处理程序中绑定事件处理函数几乎总是错误的。你真的想做什么? – Barmar

+0

这里没有循环。这些函数只是绑定调用其他函数的事件处理函数,而不直接调用其他函数。 – Barmar

回答

2

您可以使用单一的事件处理程序有:

var handler = myFirstFunction; 

$('myButton').click(function() { handler(); }); 

function myFirstFunction() { handler = mySecondFunction; } 
function mySecondFunction() { handler = myFirstFunction; } 

也就是说处理器将会调用你的函数的任何一个。

更新:或者,如果这是两个不同的按钮,然后

$('myButton').click(mySecondFunction); 
$('myOtherButton').click(myFirstFunction); 
+0

谢谢你的c - 微笑,但按钮实际上是不一样的(抱歉,这是我的错,我编辑我的帖子...) –

+0

检查更新上面然后。 –

+0

非常感谢,工作正常! –

0

你说得对,因为你提到它可能会变得混乱,所以避免在eachother中嵌套函数是很好的。我相信别人可以加入,但如果你想坚持在香草JS我会创建一个变量,你修改的状态,并有一个条件语句确定要运行的功能。

var state = 1; 

function handler(){ 
    if(state == 1){ 
     myFirstFunction(); 
     state = 2; 
    } 
    else if(state == 2){ 
     mySecondFunction(); 
     state = 1; 
    } 
} 

然后让你的myButton执行handler()函数。