2013-08-25 2 views
0

с небольшим количеством проблем с моим jquery (как обычно). Мне нужно, чтобы одна функция выполнялась только после завершения первого, но у меня возникают проблемы с синтаксисом. Я читал о .when и обратных вызовах, но я не могу заставить его работать. Я не совсем уверен, как форматировать функции :-(Любая помощьJQuery .when() как использовать?

 $('#buttonone').hover(function() { 
      $('#descriptionone').fadeIn(400);}, 
     function() { 
       $('#descriptionone').fadeOut(400); 
     }); 


     $('#buttontwo').hover(function() { 
      $('#descriptiontwo').fadeIn(400);}, 
     function() { 
      $('#descriptiontwo').fadeOut(400); 
     }); 

Я просто действительно путают, где .when идет Любая помощь будет оценена :-)

редактировать?!: жаль насчет путаницы, я имел в виду, что мне нужна вторая функция, где «#buttontwo» зависает, нужно выполнить после первой функции, где «#buttonone» зависает! Проблема прямо сейчас в том, что она выполняется до того, как первый закончен, и он перекрывается! Благодаря!

+0

Как вы бежите в перекрывающие проблемы? вы быстро нависаете над кнопками? –

+0

Спасибо за ответ! Да, это перекрытие, когда я слишком быстро перехожу к другой кнопке (до того, как первая исчезла). Мне нужно ... задержать второй из затухания, если другой все еще исчезает или что-то в этом роде, поскольку оба они находятся в одном и том же месте, и они пересекаются плохо! Еще раз спасибо! – shanling

ответ

1

.when обычно используется для асинхронных событий, таких как AJAX, поэтому попробуйте использовать FadeIn обратного вызова:

$('#buttonone').hover(function() { 
    $('#descriptiontone').fadeIn(
     400, 
     function() { // executed after fadeIn completes 
      buttontwoHover(); 
     } 
    ), 
    function() { 
     $('#descriptionone').fadeOut(400); 
    }); 
}); 

function buttontwoHover(){ 
    $('#buttontwo').hover(function() { 
     $('#descriptiontwo').fadeIn(400);}, 
    function() { 
     $('#descriptiontwo').fadeOut(400); 
    }); 
} 
+0

Спасибо за быстрый ответ! К сожалению, я действительно смущен этим кодом, в особенности функцией после fadeIn времени на третьей строке - можете ли вы немного объяснить, что вы сделали? Спасибо! – shanling

+1

Что вы действительно хотите сделать? Вы хотите, чтобы можно было наводить #buttontwo (и выполнять его функции) только после того, как #buttonone был завис или вы хотите выполнить fadeIn из #descriptiontwo только после fadeIn #descriptionone? – MichaelKaeser

+0

После этого комментария я только осознал ошибку в моем планировании jquery, так что это уже не так актуально (u_u), но я все равно хотел бы знать в будущем! Я хочу, чтобы функции # buttontwo выполнялись только после того, как функции # buttonone завершены и исчезли. – shanling

1

Вам не нужно использовать обещания здесь: fadeIn принимает обратный вызов как второй аргумент, и этот обратный вызов выполняется, когда завершение замирания завершено.

$('#buttontwo').hover(function() { 
    $('#descriptiontwo').fadeIn(
     400, 
     function() { // executed after fadeIn completes 
      $('#descriptiontwo').fadeOut(400); 
     } 
    ); 
}); 
+0

Упс! Извините, я должен был быть более ясным - мне нужен весь второй кусок функций для выполнения после первого куска функций - извините! FadeIn и fadeOuts работают отлично :-) – shanling

+0

Не в тему, Привет, dystroy, вы видели ответ [здесь] (http://stackoverflow.com/a/18419843/859154)? –

+0

@RoyiNamir Нет, не было. Это интересно, спасибо (и я надеюсь, что вы просветили комнату, которая была так жестока для вас вчера!). –

1
$('#buttonone').hover(function() { 
$('#descriptionone').fadeIn(
    400, 
    function() { 
      $('#buttontwo').trigger('hover');//trigger the second hover function in callback 
    } 
); 
}); 
1

DEMO

Попробуйте

Я предполагаю, что это это то, что тебе нужно.

var a = false; 
$('#buttonone').hover(function() { 
    $('#descriptionone').fadeIn(400); 
    a = true; 
}, 

function() { 
    $('#descriptionone').fadeOut(400); 

}); 

$('#buttontwo').hover(function() { 
    if (a == true) { 
     $('#descriptiontwo').fadeIn(400); 
    } 
}, 

function() { 
    if (a == true) { 
     $('#descriptiontwo').fadeOut(400); 
    } 
    a = false; 
}); 

Надеется, что это помогает, спасибо

+0

хм, они все еще перекрываются - спасибо за ответ, хотя! так разочаровываю u_u Я попытался переключить первый 'a = true;' к fadeOut ('#descriptionone'), потому что я думаю, что это то, где я хочу только, чтобы быть правдой, после того, как ('#descriptionone') исчез! Но я не думаю, что это правда после того, как оно исчезло, незадолго до или во время. Есть ли способ сделать «a = true»; * после того, как оно исчезло? Спасибо за вашу помощь! – shanling

+1

Я думал, что вы хотите это делать каждый раз. так что после того, как вы закончите парить над buttontwo, если у вас есть buttontwo, чтобы снова зависнуть, вы должны навести курсор на кнопку. – SarathSprakash

+0

Да, я хочу иметь возможность делать это каждый раз, но они все еще накладываются прямо сейчас :-( – shanling

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