2013-07-15 3 views
2

Я написал код, показанный ниже, для вызова лайтбокса и вызова функции, например function_a, но он будет срабатывать 16 раз.выполнить функцию не более одного раза

Как я могу сделать огонь только один раз?

$("#open").click(function(){ 
    $('.a, .b, .c, .d').fadeOut(600,function(){ 
     $('.e, .f, .g, .h').fadeIn(400,function(){ 
      function_a(); 
     }); 
    }); 
}); 

function_a(){ 
    console.log('fire') 
}; 
+0

, когда вы хотите его уволили? Когда завершится последний fadeOut? Когда первый делает? –

+0

Почему он стреляет 16 раз? Вы используете #open несколько раз? – JonathanRomer

+0

Ну, наилучшим способом было бы исправление ошибок, чтобы остановить его стрельбу 16 раз, но вы также можете просто добавить переменную count и проверить, что это 0 перед запуском – James

ответ

5

Вы можете использовать $.fn.promise, f.ex:

$("#open").click(function(){ 
    $('.a, .b, .c, .d').fadeOut(600).promise().done(function(){ 
     $('.e, .f, .g, .h').fadeIn(400).promise().done(function(){ 
      function_a(); 
     }); 
    }); 
}); 

Из документов:

Метод .promise() возвращает динамически сгенерированное обещание, которое равно , после того, как все действия определенного типа, привязанные к коллекции, в очереди или нет, закончились.

Также обратите внимание, что classNames must be at least 2 characters long.

+0

(+1), добавляя знания. Awesome ... :) – asifsid88

0

Это потому, что вы можете иметь 16 элементов, класс, обладающий теми, указанные
имеют переменную, чтобы держать след его

$("#open").click(function(){ 
    var iCount=0; 
    $('.a, .b, .c, .d').fadeOut(600,function(){ 
     $('.e, .f, .g, .h').fadeIn(400,function(){ 
      if(iCount==0) 
       function_a(); 
      iCount++; 
     }); 
    }); 
}); 
0

попробовать это:

var fired = 0; 
$("#open").click(function(){ 
    $('.a, .b, .c, .d').fadeOut(600,function(){ 
     $('.e, .f, .g, .h').fadeIn(400,function(){ 
      if (fired < 1) function_a(); 
      fired ++; 
     }); 
    }); 
}); 

function_a(){ 
    console.log('fire') 
}; 
+0

обратите внимание, что это [уже было предложено] (http://stackoverflow.com/users/1311994/asifsid88) –

+0

я могу видеть, это было не тогда, когда я отправлял сообщения, извините @JanDvorak –

+0

okay тогда, бывает ;-) –

Смежные вопросы