2017-05-30 58 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()函數。